Neodchytávají se výjimky
- medhi
- Generous Backer | 255
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
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.
- Ondřej Mirtes
- Člen | 1536
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
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
Ř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
Proč toto není v distribuci? Nezpůsobuje to přeci žádnou zpětnou nekompatibilitu?! (oživení)
- Majkl578
- Moderator | 1364
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í). :)