Routovanie adminstrácie a front-endu
- peter.z
- Člen | 37
Ahoje. Mám menší problém. S Nette začínam a snažím sa vytvoriť
route v takomto formáte:
shop/admin/katalog/produkty/edit/5/
Vysvetlenie:
To shop/
je priečinok aplikácie, čiže to stačí ignorovať. No
a tu nastáva môj zádrhel. Chcem aby bolo
produkty/
ako preseneter, edit/
ako action a
5/
ako ID. Ale čo s tým admin/
a
katalog/
? katalog/
by mohol byť ako modul ale potom
neviem čo s tým admin/
. Napadá ma riešenie, že by som
vytvoril normálne priečinok admin/
a tam by bola nanovo celá
aplikácia len pre administráciu, ale to sa mi zdá zbytočné. Snáď ste ma
pochopili :D. Uvítam každú vašu radu. Ďakujem
// EDIT: Prišiel som na to, že môžem mať modul aj ako Admin:Katalog. Routerovanie je pecka! :)
// EDIT 2: Aj tak mi to nepomohlo… Potreboval by som vytvoriť nejaký multirouter ale neviem ako :(
Editoval peter.z (5. 9. 2009 12:26)
- Patrik Votoček
- Člen | 2221
Tohle jsem nedávno také řešil… A do nedávna jsem používal 2 routy a to:
$router[] = new Route('admin/<presenter>/<action>/<id>', array(
'presenter' => 'Dashboard',
'action' => 'default',
'id' => NULL,
'admin' => TRUE,
));
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Dashboard',
'action' => 'default',
'id' => NULL,
'admin' => FALSE,
));
v presenteru mám pak boolean persistentní parametr $admin
.
Má to jednu nevýhodu pokaždé když chci odkázat z frontend části na
backend a naopak musím ho uvést. A pak také musím kontrolovat jestly je
nastaven správně.
Ale nyní to řeším tak že mám (vztaženo na tvůj příklad) tyto 2 routy:
$router[] = new Route('admin/<module>/<presenter (Backend)>/<action>/<id>', array(
'module' => 'Default',
'presenter' => 'Backend',
'action' => 'default',
'id' => NULL,
));
$router[] = new Route('<module>/<presenter>/<action>/<id>', array(
'module' => 'Default',
'presenter' => 'Dashboard',
'action' => 'default',
'id' => NULL,
));
A mám vždy modul např. Katalog:Produkty
a k němu
presentery Frontend
a Backend
. Zkrátka a dobře
místo modulu Katalog
a presenteru Produkty
mám modul
Katalog:Produkty
a presentery 2…
Edit: pozor na pořadí rout!
Edit 2: zapoměl jsem v routách nastavit module tak jsem to doplnil.
Editoval vrtak-cz (5. 9. 2009 23:14)
- Patrik Votoček
- Člen | 2221
Něco jsem tam zapoměl tak jsem to doplnil…
Ukázkové URL budou:
http://example.com/katalog.produkty/frontend/default/5 //pro frontend
http://example.com/admin/katalog.produkty/backend/edit/5 //pro backend
pokud chceš z URL odstranit to frontend a backend tak neuvedeš v masce
<presenter> nastavíš ho u backend rout vždy na Backend
a
u frontendu vždy na Frontend
ale pak budeš muset vždy mít
presentery pouze backend a frontend.
př.:
$router[] = new Route('admin/<module>/<action>/<id>', array(
'module' => 'Default',
'presenter' => 'Backend',
'action' => 'default',
'id' => NULL,
));
$router[] = new Route('<module>/<action>/<id>', array(
'module' => 'Default',
'presenter' => 'Frontend',
'action' => 'default',
'id' => NULL,
));
Jinak to (Backend) znamená že $presenter může nabívat pouze hodnoty
Backend
.