Parametry v routě
- ji_ri_k
- Člen | 44
Ahoj, stavím větší multijazyčnou aplikaci v Nette a nyní řeším routy. Mám dva problémy, nad kterými se nyní pozastavuji.
- Kolik rout je „snesitelných“ pro aplikaci (aby to pak nebylo zabržděné)
- Napsal jsem si následující routu:
$router[] = new Route('<lang cs|pl|en>/<presenter #cs-presenter>/<action #cs-action>{/<season>}{/<category>}{/<bike>}{/<product>}', array(
'lang' => 'cs',
'presenter' => 'Index',
'action' => 'index',
// nepovinné parametry zde být nemusí ...
));
A chci například toto „en/catalog/bikes/season/bike“ a nebo toto
„en/catalog/products/category/product“ (season,bike,category,product si
představte třeba jako ID). Sestavení i odkazovaní funguje správně. Ale
nepředá mi to ty nepovinné parametry do presentru. Předá je to jen pokud je
zachováno správné pořadí těch nepoviných parametrů.
Presenter např. k tomu výpisu kol mám takto:
public function renderBikes($season, $bike) {
// $season je předaná
// $bike nepředaná - protože je před ní ještě nepovinná "category"
}
Nevím, zda je to takto úmyslně (kvůli něčemu o čem nevím), nebo to lze dodělat, nebo to dokonce nějakým způsobem funguje? Snad jsem to napsal alespoň trochu srozumitelně :-).
Šlo by to řešit routou, kde bych prostě místo názvů parametrů zadal např. jen param1, param2 …
$router[] = new Route('<lang cs|pl|en>/<presenter #cs-presenter>/<action #cs-action>{/<param1>}{/<param2>}{/<param3>}{/<param4>}', array(
'lang' => 'cs',
'presenter' => 'Index',
'action' => 'index',
// nepovinné parametry zde být nemusí ...
));
Tato varianta je pak již funkční (když ještě upravím vstup do presenteru). Ale není již tolik přehledná.
Editoval ji_ri_k (22. 10. 2009 0:23)
- ViliamKopecky
- Nette hipster | 230
Tohle je případ využití Routy s rozdílnými vstupními a výstupními parametry (zatím pouze feature request)
- ji_ri_k
- Člen | 44
Myslím, že to co jsi postnul není úplně to co požaduji já, ikdyž by to tak šlo také řešit. Mě jde jen o to, aby:
en/catalog/bikes/models-2009/superbikes => ?lang=en?presenter=catalog&view=bikes&season=models-2009&category=superbikes
renderBikes($season, $bike) {} // zde to předá správně - protože je v routě pořadí stejné
en/catalog/products/accesories => ?lang=en?presenter=catalog&view=products&season=accesories
renderProducts($catagory) {} // zde to předá špatně - předá to parametr $season=accesories namísto $category=accesories
Příklad navazuje na routy napsané v prvním postu. Požadoval bych, aby
to prostě předalo v názvu té proměnné, v jaké vstupuje do presenteru.
Tzn. u té druhé url aby to předalo místo $season=accesories
správně $category=accesories
(při sestavování to funguje, jen
ne při předání)
Editoval ji_ri_k (22. 10. 2009 13:14)