Ošetření nezachycené výjimky, která zabraňuje i spuštění ErrorPresenteru

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

Představte si případ, kdy mi vypadne např. databáze a spustí se ErrorPresenter s chybou 500. Tento presenter ale dědí od BasePresenteru, ve kterém se nějaké věci s databází řeší, třeba nastavení ve startup() nebo jiné věci v beforeRender(). Potom mi spadne i ErrorPresenter a místo mé chybové stránky se zobrazí zřejmě implicitní stránka, která je zadrátovaná ve frameworku. Mimo jiné se mi uloží log o chybě v ErrorPresenteru.

Jenže jiné chyby, třeba 404, potřebují, aby ErrorPresenter dědil od BasePresenteru, protože zrovna chybová stránka 404 zobrazuje běžný layout. No a jak teď z toho ven? Jak to udělat, aby některé chyby měly běžný layout s daty z DB a jiné, třeba výpadek DB, měly speciální layout (a potažmo i jiného předka v ErrorPresenteru), který nepotřebuje DB.

David Matějka
Moderator | 6445
+
0
-

napada me na application navazat callback onError a v nem podle typu vyjimky nastavit $errorPresenter

besanek
Člen | 128
+
0
-

Napadá mě v error presenteru přetížit tyto kritické metody a volání předka obalit do try bloku a ošetřit si v něm například tu databázi.
Ale možná plácám a existuje elegantnější řešení. :)

Milanov
Člen | 51
+
0
-

Děkuji za nápady. Zatím to tedy řeším odchycením výjimky na špatné připojení k db v přetížené metodě startup() v ErrorPresenteru, jak psal besanek, a funguje to. Řešení od matej21 je taky dobrý, ale nenapadá mě, jak na něj :-)