-
Notifications
You must be signed in to change notification settings - Fork 22
18 Ošetrovanie chýb
Počas vývoja aplikácie, ale aj počas jej behu môže vzniknúť mnoho rôznych chýb.
Chyby je možné rozdeliť do niekoľkých základných skupín:
- Chyby pri vývoji aplikácie,
- chyby pri behu aplikácie,
- logické chyby.
Okrem toho môžu vzniknúť aj varovania a upozornenia, ktoré majú rozdielne správanie sa oproti chybám.
Ak je chyba priamo v zdrojovom kóde, prejaví sa hneď tým, že aplikácie preruší spracovanie aktuálnej akcie a vypíše chybu, ktorú musí vývojár opraviť, ak chce, aby aplikácia bola schopná danú akciu dokončiť. Jazyk PHP nie je kompilovaný, preto na chybu webový server narazí až vo chvíli, keď nastane. Ak je aplikácia dobre otestovaná, jej používateľ by na takúto chybu ani nemal naraziť.
Ak nastane nejaká behová chyba, aplikácia opäť preruší svoje spracovanie a činnosť ukončí. Chyba môže byť spôsobená napr. tým, že sa nepodarí pripojiť k DB serveru, pretože nie je spustený, alebo prístup k súboru bol zamietnutý, pretože webový server nemá právo na prístup k súboru a pod. V takýchto prípadoch by mala aplikácia vypísať chybu a notifikovať vývojára, že v aplikácii nastala chyba. Medzi tento typ chýb je možné započítať aj chyby, ktoré spôsobí používateľ tým, že sa pokúsi poslať neplatnú požiadavku, napr. zmení parameter id, ktorý slúži ako identifikácia modelu a záznam sa v databáze nenájde.
Posledný typ chýb sú chyby logické. Tento typ chýb sa odhaľuje najťažšie, pretože je spôsobený tým, že algoritmus nebol správne navrhnutý, alebo nebol otestovaný dostatočne a v nejakej konkrétnej situácii zlyhal. Takúto chybu aplikácia nijako neoznámi, len nebudú zobrazené očakávané informácie. O nápravu sa musí postarať vývojár opravou zdrojového kódu a jeho opätovným dôkladným otestovaním.
Niektoré operácie nie sú priamo chybou, ale môžu vyvolať nejaké oznámenia jazyka PHP (napr. sa pokúšate pristúpiť na prvok poľa, ktorý nie je definovaný, pristupujete k premennej, ktorá nebola inicializovaná a pod.). Takáto situácia nie je chybou, pre ktorú by sa aplikácia zastavila. Preto aplikácia vypíše nejaký oznam (varovanie, alebo upozornenie) a pokračuje v činnosti ďalej. Tieto situácie framework nerieši a ich ošetrenie necháva na vývojárovi.
Framework chyby ošetruje podobne ako PHP. Výnimku, ktorú PHP vyhodí, framework zachytí, pridá detailné informácie a všetko vypíše. Použije na to pohľad
error.view.php
z adresára App\Views\_Error
. Týka sa to všetkých chýb, ktoré v aplikácii nastanú.
Ak framework narazí na nejakú chybu, a je to jedno, či je to chyba, ktorá vznikla pri vývoji (napr. syntaktická chyba, volanie neexistujúcej funkcie, atď.) alebo behová chyba (pokus o otvorenie neexistujúceho súboru, delenie nulou, atď) vyhodí výnimku 500 - Internal Server Error s popisom chyby a detailnými informáciami o tom, kde chyba vznikla:
Poznámka: Pokiaľ nechcete, aby framework zobrazil detaily výnimky (napr. v ktorom súbore a na ktorom riadku nastala), je možné v konfigurácii aplikácie (trieda
App\Config\Configuration
) nastaviť konštantuSHOW_EXCEPTION_DETAILS
. Ak ju nastavíte nafalse
, zobrazí sa len chyba, ale jej detaily nebudú zobrazené.
Na chyby, ktoré vzniknú zásahom používateľa (napr. v URL adrese prepíše spomínaný parameter id
), by aplikácia mala nejako reagovať. Nemala by nechať túto
situáciu neošetrenú, ale vyhodiť vlastnú výnimku. Vo frameworku je to jednoduché (napr. príspevok s týmto id
neexistuje):
if (is_null($post)) {
throw new HTTPException(404); // Not found
}
Používateľ uvidí túto chybu:
Samozrejme, zobrazenie detailov o chybe môžete potlačiť, ako bolo uvedené v poznámke vyššie.
Poznámka: Chybu je vhodné spojiť s HTTP stavovým kódom odpovede, ako z príkladu vidno, server vráti chybu 404 - Not found, keďže záznam sa nenašiel. Obdobne, ak sa používateľ pokúša dostať na akciu, ktorú nemá povolenú, mal byť dostať stavový kód odpovede 403 - Forbidden a pod. Zoznam HTTP stavových kódov je dostupný na internete. Keďže ide zväčša o chybnú žiadosť od používateľa, odporúčame sa zamerať na chyby 4XX.
Ak vám nevyhovuje, akým spôsobom sa chyby zobrazujú, môžete si vytvoriť vlastný pohľad pre zobrazenie chýb. Stačí prepísať pohľad App\Views\_Error\error.view.php
podľa vašich predstáv.