Modularna aplikacia, PHP5.3 – nekce spustit ErrorPresenter
- srigi
- Nette Blogger | 558
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
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
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)