Neodchytávají se výjimky

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

Ahoj,
mám aplikaci na lokalu, kde Laděnka správně vyhazuje výjimky, když zadám třeba špatnou URL. Zapnu potom v boostrapu toto:

$application->errorPresenter = 'Error';
$application->catchExceptions = TRUE;

A aplikace od té doby už hází jenom ten strohý

Server Error

The server encountered an internal error and was unable to complete your request. Please try again later.
Nette Framework

Error presenter mám podle skeletonu.

Je to nějaká blbá chybka, protože vedle mám aplikaci, kde to odchytávání funguje výborně. Jako by byl problém s Error presenterem, ale ten se zdá v pořádku, zkoušel jsem ho vyměnit i za ten z fungující aplikace.

Vše běží na localu, není to problém, který by se vyskytl pouze na ostrém serveru.

medhi
Generous Backer | 255
+
0
-

Možná jsem zapomněl zmínit, že mám použit ještě nějaký hodně starý skeleton, kde tato šablona není, a že ta výjimka je BadRequestException #404, tak netuším proč by měla naskakovat chyba 500. Navíc i kdyby ta šablona 500 naskočila, měla by načíst @layout.phtml, aby to vypadalo, ale nic takového se neděje.

medhi
Generous Backer | 255
+
0
-

Ještě snad pomůže, že když si nechám chyby logovat, najdu tam tuto výjimku:

ApplicationException

An error occured while executing error-presenter

Ondřej Mirtes
Člen | 1536
+
0
-

Zkus ErrorPresenter podědit od Presenteru (ne od tvého BasePresenteru), jestli se to zlepší. Může tam nastat nějaká situace, která způsobí chybu i v ErrorPresenteru a aplikace by se tak dostala do nekonečné smyčky.

medhi
Generous Backer | 255
+
0
-

Ondřej Mirtes: Zlepšilo se to, už to vypisuje @layout a pak chybu, protože tam zase chybí určité proměnné z BasePresenteru (logicky). Ale teď zjistit, co je v BasePresenteru špatně, že od něj nemůže ErrorPresneter dědit.

medhi
Generous Backer | 255
+
0
-

Tak už jsem asi přišel na to kde je zakopán pes. Výjimka prý neumí přenášet persistentní parametry a jeden takový já v error presnteru potřebuji, jinak to hodí další výjimku a odtud to zacyklení.

Jde nějak získat v Error Presenteru pers. parametr? Někde jsem tu četl, že si ho mám uložit do session, ale není to trochu nečistý postup?

Díky

Majkl578
Moderator | 1364
+
0
-

Řešením problému by měla být úprava Application::run().

Nahradit toto:

$request = new PresenterRequest(
$this->errorPresenter,
PresenterRequest::FORWARD,
array('exception' => $e)######
);

tímto:

 $request = new PresenterRequest(
$this->errorPresenter,
PresenterRequest::FORWARD,
array_merge($request->getParams(), array('exception' => $e))######
);

(Issue na Githubu)

Editoval Majkl578 (3. 3. 2010 12:07)

Honza Kuchař
Člen | 1662
+
0
-

Proč toto není v distribuci? Nezpůsobuje to přeci žádnou zpětnou nekompatibilitu?! (oživení)

BigCharlie
Člen | 283
+
0
-

To je ve hvězdách, a to už slaví tahle chyba včetně bugfixu své první výročí

Majkl578
Moderator | 1364
+
0
-

Honza Kuchař napsal(a):

Proč toto není v distribuci? Nezpůsobuje to přeci žádnou zpětnou nekompatibilitu?! (oživení)

Asi jako dalších X věcí (drobností). :)

David Grudl
Nette Core | 8228
+
0
-

fixed. když už je to výročí ;-)

fak
Člen | 48
+
0
-

a proč ta chyba není opravená v 0.9.7?
EDIT: z nepochopitelných důvodů mi po úpravě řádku funguje Error presenter jako normální presenter a hledá templaty neexistujících stránek místo vyhození 404.phtml:(

Editoval fak (15. 3. 2011 16:10)