uprava persistentniho parametru a nekonecna smycka

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

ahoj vespolek,

narazil jsem na z meho pohledu podivnou funkcionalitu pri pouziti persistentniho parametru v presenteru. Nize pripojuji zjednoduseny priklad. Jde mi o to, ze mam persistentni parametr s datumem a v pripade ze dojde k nejake udalosti, chci tento datum zvysit o tyden. Prijde mi zvlastni, ze pokud parametr neni deklarovan jako persistentni, tak toto funguje, v opacnem pripade to ale klekne na nekonecne smycce…

Zil jsem v domneni, ze funkce persistentnich parametru je v tom, ze se generuji do odkazu – cimz se getem prenaseji dale, tohle zrejme pokud neni bug, je nejaka funkcionalita, jiz nerozumim, muze mi to nekdo vysvetlit? Pripadne odkazat? Diky predem.

I.

<?php
final class CalendarPresenter extends BasePresenter
{
    /** @persistent */
    public $datefrom_string;

    public function actionDefault()
    {
        $date = new DateTime($this->datefrom_string);
        $date->modify('+1 week');

        $this->datefrom_string = $date->format('Y-m-d');
    }
}
?>
zatomik
Člen | 19
+
0
-

Tak jsem si to zkoušel a vše mi fungovalo vpořádku, žádná smyčka se tam neobjevila a datum se o týden přičítal při každém volání.

Podle názvu tvé metody (action) soudím, že dost možná někde dále v kódu přesměrováváš? Nevytváří ti spíš nějakou smyčku špatné(zacyklené) přesměrování?

Majkl578
Moderator | 1364
+
0
-

Mezi fází zpracování akcí a signálů dochází k tzv. kanonizaci URL což je proces, při kterém se sestaví URL a porovná s aktuální. Při neshodě se přesměruje na aktuálně sestavenou. Slouží to k zajištění unikátnosti stránky vůči URL, která směřuje na totéž místo.
Tím, že v akci měníš hodnotu persistentního parametru, se dostáváš do této situace.

Qwert
Člen | 19
+
0
-

Diky za reakci. Prosel jsem to dukladne a zadne presmerovani by tam byt nemelo. Zvlastni na tom je prave to, ze pokud parametr udelam nepersistentnim, tak toto funguje.

Qwert
Člen | 19
+
0
-

Majkl578 napsal(a):

Mezi fází zpracování akcí a signálů dochází k tzv. kanonizaci URL což je proces, při kterém se sestaví URL a porovná s aktuální. Při neshodě se přesměruje na aktuálně sestavenou. Slouží to k zajištění unikátnosti stránky vůči URL, která směřuje na totéž místo.
Tím, že v akci měníš hodnotu persistentního parametru, se dostáváš do této situace.

Aha, super, tim to tedy je. Takze persistentni parametry v akci nikdy nemenit?

Editoval Qwert (9. 11. 2011 23:36)

Majkl578
Moderator | 1364
+
0
-

Můžeš, například pro normalizaci vstupní hodnoty (nějaké číselné rozmezí apod.), ale musíš si ohlídat tuhle situaci, kdy se to může dostat do smyčky.

Qwert
Člen | 19
+
0
-

jo jasne, takze zkratka zmenit tak, aby se to po redirectu nepresmerovalo zase znovu… diky.

Editoval Qwert (17. 11. 2011 14:57)