Kontrola struktury a rout
- castamir
- Člen | 629
Prosím o kontrolu správnosti rout. Ještě v nich nejsem tak zběhlý. Snažil jsem se strukturovat adresáře podle požadavků na routy. Případně mi pomozte najít lepší řešení.
Požadavky:
- doména.cz/sekce pro jednoduché sekce (presentery) webových stránek
- doména.cz/modul/sekce/akce pro modul, jeho sekce (presentery) a akce
- Jednotlivé moduly se svým účelem (a vzhledem) značně liší, proto rozdělení do modulů.
- Všechny moduly jsou přístupné jen přihlášeným uživatelům, proto budou presentery dědit od basepresenteru na nejvyšší úrovni (takže jsem zachoval i ostatní presentery statického webu na této úrovni a nedělal další modul).
Adresářová struktura:
/app
– /models
– /presenters
– /templates
– /PrvniModul
— /presenters
— /templates
– /DruhyModul
— /presenters
— /templates
Routy:
$application->onStartup[] = function() use ($application) {
$router = $application->getRouter();
$router[] = new Route('index.php', 'xxx:default', Route::ONE_WAY);
$router[] = new Route('prvni/<presenter>/<action>[/<id>]', 'Prvni:yyy:default');
$router[] = new Route('druhy/<presenter>/<action>[/<id>]', 'Druhy:zzz:default');
$router[] = new Route('<presenter>[/<id>]', 'xxx:default');
};
EDIT:
Navíc mám problém s „dvojznačností“ basepresenterů. Potřeboval bych poradit, jak se odkazovat z presenterů v modulech na globální basepresenter (nyní mám basepresenter v každém modulu, což evidentně nelze).
Editoval castamir (18. 9. 2011 12:57)
- hAssassin
- Člen | 293
ale lze, tedy zalezi co pouzivas za verzi php. Pokud 5.3 tak tam mas namespace, cili vsechny presentery v modulech by meli mit namespace nazev modulu (resp nazev slozky) – Nette podle toho hleda tridy. Cili nejak takhle:
/presenters
use Nette;
class BasePresenter extends Nette\Application\UI\Presenter {...}
/PrvniModul
/presenters
namespace PrvniModul;
class BasePresenter extends \BasePresenter {...}
/DruhyModul
/presenters
namespace DruhyModul;
class BasePresenter extends \BasePresenter {...}
Pokud mas verzi mensi nez 5.3 tak to skutecne nelze a musis pouzivat
prefixy: PrvniModul_BasePresenter
apod.
Jinak routy mas, zda se dobre.
- castamir
- Člen | 629
jen doplním, že ty routy v mého prvního příspěvku nefungovaly. Našel jsem však řešení v přesunutí app/presenters | templates do samostatného modulu (Prvni):
// Setup router
$application->onStartup[] = function() use ($application) {
$router = $application->getRouter();
$router[] = new Route('index.php', 'Prvni:Homepage:default', Route::ONE_WAY);
$router[] = $druhyRouter = new RouteList('Druhy');
$druhyRouter [] = $route = new Route('druhy/<presenter>/<action>[/<id>]', 'Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Prvni:Homepage:default');
};
Editoval castamir (19. 9. 2011 14:45)