Routa pro více modulů, kde má každý ‚admin‘ submodul

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

Zdravím,

mám situaci, kdy mám několik modulů (forum, wiki, clanky,…) a u každého chci mít administraci – tzn. řekněme submodul admin. Jak napsat routu aby obsáhla všechny moduly i se submoduly?

Pro frontend mám něco takového:

$router[] = new Route("//<module>.domena.cz/<presenter>/<action>/<id>", array(
	'module' => 'Homepage',
	'presenter' => 'Home',
	'action' => 'default',
	'id' => null,
));

Jak tam ale přidat ten submodul? Kdybych to psal pro každou zvlášť, tak bych to měl takto:

$router[] = new Route("//forum.domena.cz/admin/<presenter>/<action>/<id>", array(
	'module' => 'Forum:Admin',
	'presenter' => 'home',
	'action' => 'default',
	'id' => null,
));
$router[] = new Route("//wiki.domena.cz/admin/<presenter>/<action>/<id>", array(
	'module' => 'Wiki:Admin',
	'presenter' => 'home',
	'action' => 'default',
	'id' => null,
));
...

Jde to nějak napsat jedinou routou?

Díky za případné odpovědi :)

Editoval Robyer (6. 8. 2011 23:45)

Filip Procházka
Moderator | 4668
+
0
-

Mohlo by to jít takto:

$router[] = $admin = new RouteList('Admin');
$admin[] = new Route("//<module>.domena.cz/admin/<presenter>/<action>/<id>", array(
        'presenter' => 'Home',
        'action' => 'default',
        'id' => null,
));
Robyer
Člen | 74
+
0
-

HosipLan: To funguje, ale „naopak“ než bych chtěl. Vytváří to jeden admin modul a v něm ty ostatní jako submoduly – tzn. AdminModule/ForumModule, AdminModule/WikiModule…

duke
Člen | 650
+
0
-

Možná by to mohlo jít přes Route::FILTER_TABLE, případně obecněji přes Route::FILTER_IN (přidání „:Admin“) a Route::FILTER_OUT (odebrání „:Admin“) pro hodnotu <module>, ale nezkoušel jsem.

Robyer
Člen | 74
+
0
-

S Route::FILTER_TABLE administrace fungovala, ale ta routa se brala jako „výchozí“ pro všechny požadavky a k routě frontendu už se nic nedostalo.

Na druhou stranu, mohl bych nějak jednoduše určit, že ta frontend routa

$router[] = new Route("//<module>.domena.cz/<presenter>/<action>/<id>", array(
        'module' => 'Homepage',
        'presenter' => 'Home',
        'action' => 'default',
        'id' => null,
));

by ignorovala presenter s názvem „admin“, takže by se přeskočilo na další (tzn. admin routu)?
Zkoušel jsem tam nějak nacpat regulární výraz, ale zřejmě špatně.