Autor Zpráva
Hologos
Profil
Zdravím,
jak to děláte, když vám v ostré verzi probublá vyjímka až na fatal error?
Nebo v úplně nejvyšší vrstvě máte odchycení, které rozhodne podle závažnosti vyjímky, jestli vyhodit kód 500?
Nox
Profil
j, mám jakousi "top-level" try-catch
Majkl578
Profil
Elegantnějším řešením je vlastní exception handler.

set_exception_handler(function (\Exception $e) {
  //500 Internal error

  error_log(…);
});
Hologos
Profil
Majkl578:
Vlastní exception_handler mám trochu na něco jiného.
Díky
AM_
Profil
Hologos:
Vlastní exception_handler mám trochu na něco jiného.
mohu se zeptat na co?
"Sets the default exception handler if an exception is not caught within a try/catch block." čili vlastní exception handler dělá naprosto přesně co, na co jsi se ptal.
Hologos
Profil
AM:
Ne všechny vyjímky jsou tak závažné, že bych kvůli tomu musel nastavovat hlavičku 500 Internal Error.
A jakmile už se spustí exception_handler, už je to jistý fatal error. Proto mi připadá, že rozhodovat to až tam, je pozdě.

Jinak ho využívám k tomuto - pokud je vývojové prostředí, tak se vypíše chyba s tracktracem v přehlednější formě, pokud je produkční prostředí, tak se zaloguje.

Jinak určitě by se zde daly vést sáhodlouhé slohy o tom, že všechny vyjímky musí být zachycené. Každopádně mi příjde, že pokud někdo místo integeru předá string (např. id) a zapomenu ho odchytit, tak stačí vypsat, že článek nebyl nalezen a později se z logu dozvím, že nemám odchycenou IOException.
Majkl578
Profil
Hologos:
A jakmile už se spustí exception_handler, už je to jistý fatal error. Proto mi připadá, že rozhodovat to až tam, je pozdě.
Tohle je špatně. Pokud výjimka probublá až do globálního prostoru a není zachycena, je fatální ať už je její účel jakýkoliv. Hodná výjimka má být zachycena jinde v příslušném try … catch bloku.
Hologos
Profil
Majkl578
Já například v této záležitosti souhlasím s panem Vránou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0