Kontrola struktury a rout

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
castamir
Člen | 629
+
0
-

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
+
0
-

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
+
0
-

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)