Modularna aplikacia, PHP5.3 – nekce spustit ErrorPresenter

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

Zdravicko, dva dni dozadu som tu riesil fungovanie modularnej app v PHP-5.3. Vsetko sa zdalo OK, az do momentu, ked som kcel odskusat handlovanie 404 a pod. Zistil som, ze ked zablokujem Ladenku a v bootsrap.php nastavim:

<?php
$application->catchExceptions = TRUE;
?>

(co ak som spravne pochopil, by malo zapnut odchytavanie vynimiek a ich preposielanie na ErrorPresenter), tak sa aplikacka zosype na tom failsafe errorhandleri v Nette\Application\Application.php (riadok 200 v aktualnej distr. pre PHP-5.3).

Nezosype sa vsak priamo, lebo ked si vsimete, na riadku 190 je rozhodovaci kod:

<?php
if (!$repeatedError && $this->errorPresenter)
?>

Ten aj skutocne, sa v prvej iteracii „dispatchingu“ (sry za Zend vyraz) pokusa poslat spracovanie vynimky do ErrorPresentera:

<?php
	$repeatedError = TRUE;
	$request = new PresenterRequest(
		$this->errorPresenter, // toto ma hodnotu Front:Error
		PresenterRequest::FORWARD,
		array('exception' => $e)
	);
	// continue
?>

Nasledne zacne druha iteracia „dispatchingu“ (velky do-while blok), ale nasledny pokus o vytvorenie instancie ErrorPresentera (riadok 146) skonci novou vyminkou a ako som spominal, cele sa to zruti do toho statickeho failsafe na riadku 200.

Este pre doplnenie, v tomto prispevku ma Ondřej upozornil na to, ako mam ErrorPresenter v bootsrape nastavit. To som aj vykonal a tieto udaje aj skutocne vstupuju do toho pokusu o vytvorenie instancie ErrorPresentera, co dokazuje shot z debugera (otvorte si obr. priamo – je sirsi):

Bohuzial ako som vravel, toto vyhodi novu vynimku (konkretne volanie):

<?php
$class = $this->getPresenterLoader()->getPresenterClass($presenter);
?>

PLS poradte kde by mohla byt chyba. Uvazoval som, ze za to teoreticku moze routing, lebo ten prebehne pred samotnym pokusom o vytvorenie instancie ErrorPresenter.
THX.

Ondřej Mirtes
Člen | 1536
+
0
-

Když nastavíš catchExceptions = true a laděnku na Debug::PRODUCTION a jdeš na neexistující URL, tak co se objeví v prohlížeči? :)

Ještě ukaž kód svého ErrorPresenteru.

srigi
Nette Blogger | 558
+
0
-

OK som vôl, zabudol som v FrontModule/presenters/ErrorPresenter.php na zaciatku nadefinovat namespace na FrontModule. Samozrejme teraz to uz chodi.

ach jaj, skoda toho casu co som zabil debugovanim a pisanim prispevku, mohol som ho investovat na poriadne skontrolovanie mojho kodu. Ale aspon som si v Archu rozbehal Xdebug :)

Editoval srigi (13. 1. 2010 22:02)