Pořadí modulů v routě a URL
- ajda2
- Člen | 66
Čaute,
vytvořil jsem si namespace / adresářovou strukturu aplikace, která je
ve tvaru:
/Modules/<Název modulu>/
FrontModule
AdminModule
Bohužel se mi však nedaří najít tvar pro obecnou routu, která by generovala tvar URL
/admin/<Název Modulu>/<Presenter>/<action>
Tedy v opačném pořadí.
Nette mi routy generuje s tečkou, např.
gallery.admin/gallery
Není někde ukázka, jak toho docílit?
V Dokumentaci se běžně tento tvar Module/Front/Presenter
uvádí a nemyslím si, že pak tvoří každou routu ručně..
Děkuji za pomoc, jsem už bezradný.
- ajda2
- Člen | 66
Například tady je uveden tvar Module/Admin
, respektive
Forum/Admin
https://doc.nette.org/…tion/routing#…
Tady už je to zase opačně
https://doc.nette.org/…eating-links#…
Nedokážete mi někdo poradit, jak vytvořit masku routy, které by vytvářelo routy:
/admin/module/presenter/action
Samozřejmě můžu napsat routy pro každý Modul a Presenter ručně, ale
určitě to půjde zapsat nějak obecně.
Jen na to nemůžu přijít…
Když vytvořím routu
$routeList->addRoute("admin/<module>/<presenter>[/<action>][/<id>]", "Core:Admin:Homepage:default");
Tak získám routy např. ve tvaru
/admin/news.admin/news
Nevíte, jak to upravit, aby generovalo
/admin/news/presenter
?
Dává mi totiž smysl mít celý Module uzavřený v jednom namespace,
včetně Presenterů, komponent apod., než mít FrontModule
a
v něm část Modulu a pak zase AdminModule
.
David Grudl napsal(a):
Kde se v dokumentaci uvádí?
- ajda2
- Člen | 66
Jen pro pořádek uvedu, že jsem schopen požadovaný tvar zapsat ručně touto formou:
$adminRouter = $routeList->withModule("Page")
->withModule("Admin");
$adminRouter->addRoute("admin/page[/<action>][/<id>]", "Page:default");
$adminRouter->addRoute("admin/page/<presenter>[/<action>][/<id>]", "Page:default");
Toto mi správně vygeneruje url
/admin/page
a
/admin/page/<presenter>
Jen to nejsem schopný převést do obecné formy, abych to nemusel pro každý Modul psát ručně.
- David Grudl
- Nette Core | 8218
Píšu z hlavy, ale asi bych na to šel nějak přes globální filtry, tj
$routeList->addRoute("admin/<mod>/<presenter>[/<action>][/<id>]", [
null => [
Route::FILTER_IN => function (array $params): $params {
$params['presenter'] = ucfirst($params['mod']) . ':Admin:' . $params['presenter'];
unset($params['mod']);
return $params;
},
Route::FILTER_OUT => function (array $params): $params {
// opacna transformace, kdy z Mod:Admin:Presenter v $params['presenter'] udelam Presenter a vyrobim $params['mod'];
return $params;
},
]
]);
module
má speciální význam, tak raději parametr
nazývám mod
- ajda2
- Člen | 66
Díky,
skrze globální filtr mě to nenapadlo řešit ;)
David Grudl napsal(a):
Píšu z hlavy, ale asi bych na to šel nějak přes globální filtry, tj
$routeList->addRoute("admin/<mod>/<presenter>[/<action>][/<id>]", [ null => [ Route::FILTER_IN => function (array $params): $params { $params['presenter'] = ucfirst($params['mod']) . ':Admin:' . $params['presenter']; unset($params['mod']); return $params; }, Route::FILTER_OUT => function (array $params): $params { // opacna transformace, kdy z Mod:Admin:Presenter v $params['presenter'] udelam Presenter a vyrobim $params['mod']; return $params; }, ] ]);
module
má speciální význam, tak raději parametr nazývámmod