Skip to content

18 Ošetrovanie chýb

Michal Ďuračík edited this page Nov 14, 2023 · 1 revision

Ošetrovanie chýb

Počas vývoja aplikácie, ale aj počas jej behu môže vzniknúť mnoho rôznych chýb.

Typy 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.

Chyby pri vývoji aplikácie

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ť.

Chyby pri behu aplikácie

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.

Logické chyby

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.

Varovania a upozornenia

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.

Ošetrovanie chýb vo frameworku

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ú.

Vývojové a behové chyby

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:

500 - Internal server error

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štantu SHOW_EXCEPTION_DETAILS. Ak ju nastavíte na false, zobrazí sa len chyba, ale jej detaily nebudú zobrazené.

Používateľské chyby

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:

404 - Not found

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.

Úprava spôsobu zobrazovania chýb.

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.