Routa na všechny moduly kromě Front

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

Mám trochu problémek – aplikace je rozdělená tak, že celý frontend je v modulu Front a jakýkoliv jiný modul vede do backendu. Routy by měly fungovat tak, že frontend se chová stejně jako třeba bezmodulový example z distribuce, zatímco routa do backendu je uvozená admin/ a obsahuje v adrese i modul.

$router[] = new Route('admin/<module !Front>/<presenter>/<action>/<id>', array(
	'module' => 'Dashboard',
      'presenter' => 'Default',
	'action' => 'default',
	'id' => NULL,
));

$router[] = new Route('<presenter>/<action>/<id>', array(
	'module' => 'Front',
      'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));

Zkusil jsem „všechny moduly kromě Front“ zapsat jako !Front, což se jevilo jako funkční. Jenže problém nastal při generování odkazu (z :Dashboard:Default:default) například na modul login ($this->redirect(":Login:Default:")) – vyskakuje výjimka „No route for Login:Default:default()“.

Poradil by někdo, jak toto řešit? Samozřejmě do routy nemůžu vypisovat všechny možné hodnoty backend modulů, stejně jako nechci routy vytvářet dynamicky. Ještě dodám, že používám vlastní adresářovou strukturu (PresenterLoader), ale to by podle mě mělo být při tvorbě odkazu irelevantní.

na1k
Člen | 288
+
0
-

Vyřešeno! Následující kombinace rout vypadá že funguje podle očekávání :-)

$router[] = new Route('admin/<module (?!Front)[^/]+>/<presenter>/<action>/<id>', array(
	'module' => 'Dashboard',
      'presenter' => 'Default',
	'action' => 'default',
	'id' => NULL,
));

$router[] = new Route('<presenter>/<action>/<id>', array(
	'module' => 'Front',
      'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));