když zadám default id, tak se famework přesměruje

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

Zdravím, moc to nechápu. Stáhnul jsem si Nette + sendbox a jediné co jsem udělal je přidal toto do homepagePresenteru

public function actionDefault($id = 5)
{
}

jednoduše jsem přidal výchozí hodnotu pro action default. Což mi přijde logické (je to id pro domovskou stranku v databazi). Ale kdyz spustim aplikaci tak se automaticky presmeruje na domena.cz/homepage/default/0
coz vubec nechapu proc se deje. Vysvetli mi to nekdo?

Aurielle
Člen | 1281
+
0
-

Jak máš nadefinované routy?

pavouk
Člen | 12
+
0
-

Jak jsem psal, neudelal jsem opravdu vubec nic jineho. Takze presne tak jak jsou v sendboxu. Tedy:

$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);

$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
Aurielle
Člen | 1281
+
0
-

Ono je totiž potřeba nastavit výchozí hodnotu i v routě (netuším jak se to zapisuje „nově“, ale starý způsob by vypadal takto:)

$router[] new Route('<presenter>/<action>[/<id>]', array(
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => 5,
));
pavouk
Člen | 12
+
0
-

No tak já jsem to nakonec vytvořil poměrně snadno že tu výchozí hodnotu nastavuji uvnitř actionDefault, ale celkem mě to přijde divné chování a hlavně jsem pěkně dlouho hledal kde jsem zapoměl nějaký redirect dokud jsem na to nepřišel, protoře tohle by mě nenapadlo… Takže můj dotaz byl spíš proč se to děje než jak to mám vyřešit…

Šaman
Člen | 2666
+
0
-

Doufám, že neplácám kraviny, když podám tohle vysvětlení (hledat to ve zdrojácích teď nemám čas):
Pokud v zadáš parametr u akce nebo pohledu, tak se Nette pokusí tento parametr získat a předat ho. Tím se například zajistí, že po přesměrování bude tento parametr v adrese aniž ho tam musíš přidávat ručně. No a tys chtěl, aby Nette dodalo parametr id. (To, že má být defaultně 5 by se projevilo až kdyby nebyl předán.) Ale Nette zjistí, že defaultní parametr v routě není zadán a dosadí nulu, tu pak předá jako parametr do metody actionDefault(0) a tím pádem ta pětka už nikoho nezajímá.

Správné řešení je to, které psal gmvasek. Defaultní hodnotu si definuj v routě a tu akci zapiš takto:

public function actionDefault($id)
{
}