SimpleRouter a parametr „module“ v „defaults“
- Yrwein
- Člen | 45
Již to jednou bylo naťuknuto, každopádně:
Shrnutí: Parametr module v poli defaults se nechová jako ostatní hodnoty, ale omezuje působnost SimpleRouteru.
Opravdu by stálo za to tohle chování změnit – tzn. buď klíč přejmenovat (a vykopnout z defaults do samostatného parametru) nebo nahradit chováním, které by člověk očekával. (Edit: Nebo obojí.)
Editoval Yrwein (11. 5. 2010 22:10)
- Yrwein
- Člen | 45
Člověk by očekával, že se tento klíč bude chovat stejně jako ostatní, např. „presenter“ – tzn. jeho hodnota bude brána jako defaultní (a nebude omezovat pole působnosti routeru). (Zvláště není-li toto chování ani v kontraktu metody.)
(Poznámka na okraj mimo téma: Málem jsem vaši odpověď nezaznamenal aneb tento způsob fóra zdá se mi poněkud nešťastným. :) Už mlčim.)
- David Grudl
- Nette Core | 8218
Ale co je to „defaultní“ modul? Dejme tomu, že máme defaultní modul
Admin
. Jak bude vypadat link na presentery Homepage
vs
Admin:Homepage
?
- Yrwein
- Člen | 45
http://blabla.cz/
→ defaultní modul je ten, na který se člověk dostane spolu s defaultním
presenterem atd. Chování vytváření PresenterRequestu před voláním
constructUrl bych neměnil, opravdu mi jde jen o tu jednu drobnost (=
nelogické umístění omezujícího klíče v poli ‚defaults‘).
Jak jsem psal v prvním (pravděpodobně nesrozumitelném, omlouvám se za „kopyrajtr“ skills) příspěvku: Stačí klíč vykopnout z defaults do jiného parametru (třebas pojmenovaném $restrictToModule).
$router[] = new NSimpleRouter(array('module' => 'Front', 'presenter' => 'Default', 'action' => 'default'));
->
$router[] = new NSimpleRouter(array('presenter' => 'Default', 'action' => 'default'), 'Front');
Otázka, co bude znamenat klíč module v defaults je pak nasnadě, nicméně odpověď může být dvojí (a nebyla primárně předmětem mého prvního příspěvku): Buď nebude fungovat vůbec. (A pak bude stačit jen ta výše zmíněná změna.) Nebo by se klíč ‚presenter‘ rozdělil ve dví (‚module‘ a ‚presenter‘) – samozřejmě s tou nevýhodou, že to bude další BC, navíc možná zbytečný.
- David Grudl
- Nette Core | 8218
Parametr module
má ve všech routerech trošku výsostné
postavení, protože se ve skutečnosti nepředává, ale skládá se z něj
parametr presenter
. Jsem si vědom toho, že to není úplně
čisté řešení, ale je poměrně snadno dosažitelné. Nicméně budu nad
úpravou uvažovat.
- westrem
- Člen | 398
Ahoj, presne na tento problem, sa najskor pytam a potazmo si aj sam odpovedam vo vlaknu: https://forum.nette.org/…implerouteri
Presne ako Yrwein vravi, pride mi to ako nanajvys nie intuitivne chovanie a uz X razy som sa cudoval preco mi nefunguju zakladne routy az kym som si zase spomenul na magiu s modelom v route.
Ovela viac by som uvital to co ponuka Yrwein:
$router[] = new NSimpleRouter(array('presenter' => 'Default', 'action' => 'default'), 'Front');
Pripadne aby module
v poli s default hodnotami neobmedzoval
posobnost ale len urcoval default modul ak sa proste nic nenamapuje
na routu.