Route u submodulů ve stylu /Front/submodul/presenter

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

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

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

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

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)

nanuqcz
Člen | 822
+
0
-

@hAssassin: ahaa, konečně mi došlo, k čemu vlastně ten RouteList je, díky :-)

pidiclovek
Člen | 91
+
0
-

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