SimpleRouter a parametr „module“ v „defaults“

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

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)

David Grudl
Nette Core | 8218
+
0
-

Jaké chování by člověk očekával?

Yrwein
Člen | 45
+
0
-

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

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

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ý.

Yrwein
Člen | 45
+
0
-

…samozřejmě další možnost je tohle chování alespoň zdokumentovat. :) (Chápu, že další BC break i do verze 1.0 by nemusel být po chuti.)

David Grudl
Nette Core | 8218
+
0
-

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

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.