AbortException a redirect

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

Ahoj,
chtěl jsem aby kdyz nema nekdo opravneni tak se mu ani nezobrazil fomrular a tak jsem na zacatek metody dal toto:

<?php
public function renderFormAdd()
{
	if(!$this->presenter->user->isAllowed('news', 'add')){
		$this->presenter->flashMessage("Nemáte oprávnění pro tuto akci");
		$this->presenter->redirect("Default:");
	}
	...
}
?>

Ale takle mi to hazi AbortException
Nevim co s tim. Ta hlaska mi nic nerika. Koukal jsem ze se to tady i resilo ale z niceho jsem to nepochopil…

Filip Procházka
Moderator | 4668
+
0
-

AbortException ti to ale neháže tady. Ulož výpis laděnky jako html stránku a někam ji nahrej a pošli odkaz

sin
Člen | 82
+
0
-

Je to zkopirovana ta stranka
http://www.sinacek.cz/…e/Error.html

clonator
Člen | 3
+
0
-

Mám stejnej problém, vyřešil jsi to nějak?

Honza Kuchař
Člen | 1662
+
0
-

Mrkněte jak funguje Presenter a hned vám to bude jasnější.
https://api.nette.org/…ter.php.html#218
tzn. výjimka se vyhazuje někde mimo Presenter::run()

David Grudl
Nette Core | 8218
+
0
-

Jestli si dobře pamatuju, stalo se ti to i na školení, že?

Tohle je velmi zvláštní stav a trošku mi to připomíná problém na hostingu Savana – tu výjimku totiž musí zachytit Application a je záhada, proč ji nezachytí. Můžeš sem poslat phpinfo? Nebo zkusit update na jinou verzi PHP? Připadně dát sem ke stažení celý image PHP + Apache + aplikace, aby se na to mohl podívat někdo další?

LM
Člen | 206
+
0
-

Není to tím že se redirect volá až při renderování šablony (z RenderResponse), takže až po Presenter::run(), a tak tu vyjímku zachytí až Application a ta na AbortException nijak nereaguje? (viz ten výpis z debug, kde už je dokonce vidět výstup ze šablony)

Editoval LM (16. 2. 2010 18:28)

David Grudl
Nette Core | 8218
+
0
-

Ale proč Application na AbortException nijak nereaguje? Ten výpis z debugu už sám o sobě ukazuje, že je v PHP něco moc špatně.

LM
Člen | 206
+
0
-

Jak by na ni vlastně měla reagovat? vždyť v debug módu ji prostě vyhodí znovu, ono stačí dát do šablony:

test
{? $presenter->redirect('foo') }

a vyskočí to stejné co je v odkazovaném výpisu z laděnky.

Aurielle
Člen | 1281
+
0
-

Mě tohle na savaně dělalo také, jen s AuthenticationException, ale když jsem zapnul laděnku tak se chyba odchytila a zobrazila.

David Grudl
Nette Core | 8218
+
0
-

Díky za nakopnutí, jsem vůůůůl :-)) Vůbec mě nenapadlo, že to může být znovuvyhozená výjimka, což call stack neodhalí.

sin napsal(a):

Do metod render() nedávej přesměrování, při renderování stránky už je na přesměrovávání pozdě.

Ola
Člen | 385
+
0
-

Davide, týká se to ale jen komponent, ne?

David Grudl
Nette Core | 8218
+
0
-

No jasně, metody render<View>() presenteru se volají dřív, než vykreslování začne.