Přesměrování po volání z latte

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

Zdravím,

snažím se o přesmerování po odchycení chyby v komponentě, problém je, že místo korektního přesmerování dojde k vyhození vyjímky „Nette\Application\AbortException“ která není zachycená a tudíš přesměrování neproběhne.

Problém je možné demonstrovat jednoduše např. takto:

Presenter:

public function createComponentTest(){
    $this->redirect('this');
}

Latte:

{control test}

Z toho vyplývá že není možné používat přesmerování uvnitř komponent výjímaje callbacku z formuláře. Nevěřím tomu že je toto chování korektní. Můj konkretní případ je komponenta na pop-up-okna která se vykresluje přez snippet, její nastavení se načítá z cache a potřebuju z ní volat redirect což momentálně není možné. Pokud bude fungovat výše uvedená demonstace bude fungovat i přesmerování z komponenty.

Můj dotaz zní: je toto chování feature nebo bug ? Pokud feature jak řešíte přesmerování z komponent ?

Děkuji

David Matějka
Moderator | 6445
+
0
-

Toto je ocekavane chovani, ze nepujde presmerovat pri vykreslovani. Proc konkretne potrebujes presmerovat? a kde mas v te komponente na popup redirect? v render?

kazz
Člen | 8
+
0
-

Např. když vyprší cache a ano volám redirect v metodě render.

David Matějka
Moderator | 6445
+
+1
-

v render muze byt pozde – i kdyby se zachytila vyjimka, tak by neslo presmerovat kvuli tomu, ze uz muze byt neco vykresleno.

asi by slo to resit v metode attached (podobne jako je to tady) s tim, ze tu komponentu budes muset rucne inicializovat v presenteru pres $this['test'], aby se vytvorila driv nez pri renderovani

kazz
Člen | 8
+
0
-

Super funguje, děkuji moc za pomoc a díky za brzkou reakci :)

CZechBoY
Člen | 3608
+
0
-

Co můžeš předat hned tak předej přes konstruktor ;-)