Route u submodulů ve stylu /Front/submodul/presenter
- pidiclovek
- Člen | 91
Ahoj, začínám s frameworkem a pustil jsem se do routování. Můj dotaz je následující, prolezl jsem příručku programátora co se týče rout i odkazů ale neuspěl jsem. Mám dva klasické moduly Front a Admin a uvnitř Adminu jsou ještě další dva moduly, např A a B.
Adresa pak bude vypadat www.example.com/…enter/action.
Je možné, aby se submodul choval v routě jako modul? Tedy místo tečky
/?
(www.example.com/…enter/action)
Díky moc :)
- nanuqcz
- Člen | 822
Ahoj, routy pro jednotlivé moduly se asi budou muset nastavit ručně
$router[] = new Route('admin/a/<presenter>/<action>[/<id>]', 'Admin:A:Homepage:default');
$router[] = new Route('admin/b/<presenter>/<action>[/<id>]', 'Admin:B:Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Front:Homepage:default');
- hAssassin
- Člen | 293
@pidiclovek > s timhle mam taky problem a pokud tech submodulu je vic nez dva tak to pak je problem s celkovym poctem rout (je jich pak strasne hodne)… reseni s teckou se mi vubec nelibi… nejlepsi je neco takovyho:
$router[] = new Route('admin/<module a|b|c|d>/<presenter>/<action>/[<id>/]', 'Homepage:default');
a
, b
, c
a d
jsou moduly.
Dokonce by ani nemel byt problem s vychozim presenterem pro kazdy submodul.
Tohle mi fungovalo, ale problem byl vicejazycne nazvy modulu. Pak se ty moznosti
musi generovat pro vsechny jazyky a to neni ani hezky ani spravny (napr. pro
anglictinu pojede modulu sprava-obsahu misto cms, apod.).
Takze momentalne to mam uplne jednoduse takhle:
$router[] = new Route('admin-<module>/<presenter>/<action>/[<id>/]', 'Homepage:default');
Vycet tady neni nutny a funguje to i pro multijazycny nazvy modulu vzdy pro aktualni jazyk. Sice to neni uplne nejhezci (ano, to s tim lomitkem se mi to libi vic), ale zatim nejuspokojivejsi reseni co me napadlo. Ma nekdo lepsi? :-D
Editoval hAssassin (24. 7. 2011 3:36)
- nanuqcz
- Člen | 822
$router[] = new Route('admin/<module a|b|c|d>/<presenter>/<action>/[<id>/], 'Homepage:default');
Jak podle toho Nette pozná, že má používat presentery v modulu
Admin:A:
? Submodul A
je mi docela jasný, ale jak
pozná, že hlavní modul je Admin
, když ve druhém parametru
routy máš jen Homepage:default
?
- hAssassin
- Člen | 293
ups to sem zapomnel dopsat, samo ze tam mam jeste definici routeList pro admina (a zvlast pro Front)… cely to mam pak nejak takhle:
$router[] = $adminRouter = new Routers\RouteList('Admin');
$adminRouter[] = $route = new Routers\Route('[<lang=cs cs|sk|en>/]admin-<module>/<presenter>/<action>/[<id>/]', 'Homepage:default');
$adminRouter[] = $route = new Routers\Route('[<lang=cs cs|sk|en>/]admin/<presenter>/<action>/[<id>/]', 'Homepage:default');
Editoval hAssassin (24. 7. 2011 3:35)
- pidiclovek
- Člen | 91
Díky kluci :),
nakonec jsem to vyřešil obdobně, to pomlčkové řešení se mi docela líbí, esteticky je to lepší, než tečky. Jinak určitě je výhodný používat RouteListy, je to pak přehlednější. Ty už jsem měl před tim, jen jsem je teď obohatil o ty pomlčky. Zatim to funguje, Budu si pak s routami hrát na samém konci aplikace ještě, pokud vymyslím něco lepšího, hodím to sem