Zmena persistentneho parametru a presmerovani

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

Zdravim, Pouzivam nette 2.0.*

A chcel by som zistit, ci je nasledujuca vec ficura (a mozem ju pouzivat) alebo bug.

Ak zmenim perzistentny parameter v prezentru v startup alebo v niektorej s action* metode teda

<?php
	...
	$this->parameter = 'xyz'
	...
?>

Nette automaticky urobi redirect na url s novou hodnotou tohoto parametru. (beforeRender sa uz nezavola)

Pokia je to ficura, je to niekde zdokumentovane, kde este mozem menit parameter, tak aby nastalo presmerovanie? Funguje to tak i v nette 2.1?

Editoval matopeto (29. 8. 2013 14:25)

duke
Člen | 650
+
0
-

Souvisí to s kanonizací URL. V dokumentaci je o tom řeč zde.

matopeto
Člen | 395
+
0
-

Pokial to suvisi s autokanonizaci, preco sa url presmeruje i v action, tak zmena parametru, sposobi redirect a znovuzavolanie tej istej akcie… (Presmerovanie na kanonizovanu url by nemalo spustat action*)

duke
Člen | 650
+
0
-

kódu je zjevné, že action metody se skutečně volají před automatickou kanonizací.

Na otázku, proč bylo zvoleno právě toto pořadí, ti asi přesnou odpověd může dát pouze David Grudl.

Já v tom vidím jednak možnou optimalizaci založenou na předpokladu, že pokud aplikace sama provede nějaké přesměrování (byť třeba při zpracování nekanonického url), udělá to nejspíš právě v action metodě, takže by v těchto případech odpadlo jedno zbytečné přesměrování (to kanonizační).
Ale spíš jde o to, že lze předpokládat, že persistentní parametr nebude v action metodě nikdo chtít měnit aniž by sám následně vyvolal přesměrování. Jaký smysl má měnit persistentní parametr a pak nepřesměrovat? Bez přesměrování pak totiž renderuješ jiný stav, než odpovídá url.