Zachytávání výjimek errorPresenterem v bootstrapu
- Aurielle
- Člen | 1281
Zdravím,
v bootstrapu se kromě jiného připojuji k databázi, a když je databáze
nedostupná (stát se to může) bych rád zobrazil formátovanou chybovou
zprávu místo prázdné stránky. ErrorPresenter mám nastavený a funkční,
ale výjimku z bootstrapu nezachytí. Výjimky z aplikace ano.
Je na tento problém nějaké řešení nebo je řešením přesunout připojování k databázi někam jinam?
- kravčo
- Člen | 721
Výnimky aplikácie sú zachytávané v rámci „životného cyklu
aplikácie“, v metóde Application::run()
, bootstrap mu
predchádza – presnejšie on tento cyklus len spúšťa na svojom konci,
preto výnimky z neho aplikácia nemá ako zachytiť.
Riešením by mohlo byť napríklad použitie udalosti aplikácie
onStartup
:
class MyTools
{
public static function connect2database(Application $app)
{
dibi::connect(Environment::getConfig('database'));
}
}
$application = Environment::getApplication();
$application->onStartup[] = 'MyTools::connect2database';
$router = $application->getRouter();
$router[] = ...
$application->run();
- vlki
- Člen | 218
Vzhledem k tomu, že ErrorPresenter začne zachytávat až když je spuštěná aplikace, tak je potřeba je přesunout jinam.
Pěkné řešení je si udělat nějakou metodu/fci, ve které proběhne
připojení k databázi. V bootstrapu pak tuhle metodu/fci navázat na
událost onStartup
aplikace.
class BaseModel extends Object {
public static function connect()
{
// some db connecting
}
}
// bootstrap.php
$application->onStartup[] = 'BaseModel::connect';
EDIT: Měla by se do fóra dodělat nějaká kontrola, zda při psaní příspěvku nedošlo k přidání dalšího. Třeba jen nějaký confirm. Což? Tohle se stává nějak moc často:) Takže… Byl jsi rychlejší kravčo:)
Editoval vlki (17. 9. 2009 17:19)
- vlki
- Člen | 218
redhead napsal(a):
Řekl bych že připojení by mělo být lazy, čili připojit se pokud je to při současném požadavku nutné. Já to dávám do nějakého modelu (singletonu).
Obecně ano. Doplním jen, že pokud se k připojování používá dibi,
může být lenivá za vás. Stačí v parametrech nastavit lazy
na TRUE a k samotnému připojení k serveru dojde až při prvním požadavku
na dibi.