Routovanie adminstrácie a front-endu

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

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

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)

peter.z
Člen | 37
+
0
-

A aká bude potom príkladová URL? A ešte, čo znamená to (Backend) v <presenter (Backend)>?

Patrik Votoček
Člen | 2221
+
0
-

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.