Parametry v routě

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

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.

  1. Kolik rout je „snesitelných“ pro aplikaci (aby to pak nebylo zabržděné)
  2. 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
+
0
-

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

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)