În calitate de dezvoltator PHP, puteți utiliza excepții, deoarece acestea vă permit să observați când ceva nu a mers bine sau utilizatorul a acționat într-un mod neobișnuit (cum ar fi împărțirea la zero). Fără excepții, cererea dvs. va sfârși prin a prezenta erori nedorite și fiind mult mai dificil de depanat. Este, de asemenea, important să opriți imediat executarea și să luați o altă acțiune.
Excepțiile sunt cu adevărat simple și vă vor ușura progresul dezvoltării. Când aflați cum să utilizați excepțiile, aceasta va fi o parte obișnuită a dezvoltării dvs..
Cred că cea mai bună definiție pentru excepții este dată de Martin Fowler:
Excepțiile semnalează ceva în afara limitelor așteptate de comportament ale codului în cauză.
Exact, de fapt, o excepție este un eveniment, care apare în timpul executării unui program, care perturbe fluxul normal al instrucțiunilor programului. Cand tu arunca
(creați un obiect de excepție și transmiteți-l sistemului de executare) o excepție, sistemul va captură
aceasta prin căutarea unui handler adecvat și returnarea mesajului adecvat.
încercați // codul merge aici captură (Excepție $ e) // dacă sa întâmplat o excepție în blocul de încercare de mai sus
Utilizați excepții atunci când sistemul dvs. se confruntă cu circumstanțe excepționale care împiedică preluarea sistemului. Utilizăm excepții numai atunci când sistemul nu este capabil să determine ce sa întâmplat. Martin Fowler consideră că "dacă un eșec este comportamentul așteptat, atunci nu ar trebui să folosiți excepții". Aceasta înseamnă că trebuie să utilizați excepții în cazul în care nu puteți determina eroarea. Excepțiile ar trebui utilizate numai în situații excepționale.
Notă: Excepțiile nu sunt bune pentru manipularea operațiilor logice.
Pentru un sistem cum ar fi validarea intrării, se utilizează excepții gresit. În primul rând, textul de intrare va fi determinat și într-o aplicație ca aceasta ar trebui să raportăm o colecție de erori în loc de o singură eroare. Cred în eliminarea utilizării excepțiilor în orice situație în care ne-am putea aștepta la eșecuri de validare.
Prinderea unei excepții este foarte importantă, deoarece dacă nu prindeți o excepție, sistemul va afișa o eroare. Operațiunea de prindere trebuie să fie cât mai aproape de punctul de eșec posibil.
Laravel folosește excepție Handler, care este o clasă în App \ Excepții \ Handler.php
. Această clasă conține două metode principale ( renderHttpException
, care este folosit pentru toate excepțiile HTTP, cum ar fi 404s și 503s, se află în clasa părinte a Handler). Primul este raport
, care este folosit pentru a loga excepții sau a le trimite la un serviciu extern. Iată un exemplu al metodei raportului:
raportul funcției publice (Excepție $ e) if ($ e instanceof CustomException) // retur părinte :: raport ($ e);
Al doilea este face
. Metoda de redare este responsabilă pentru conversia unei excepții date într-un răspuns HTTP care trebuie trimis înapoi în browser. Iată un exemplu al metodei de randare:
funcția publică ($ request, Exception $ e) if ($ e instanceof CustomException) return răspuns () -> vizualizare ("errors.custom", [], 500); return parent: render ($ request, $ e);
Notă: Puteți utiliza funcția $ dontReport
proprietatea handlerului de excepții pentru a ignora excepțiile de tip.
Aveți posibilitatea să înlocuiți metodele de excepție Laravel în propria dvs. excepție, cum ar fi:
funcția publică ($ request, Exception $ e) if (config ('app.debug')) retur părinte :: render ($ request, $ e); returnați $ this-> handle ($ request, $ e);
Acest lucru se va face atunci când config debug este adevărat.
Este posibil să aveți nevoie să creați o clasă de excepție proprie. Trebuie să extindeți din clasa Excepție de la baza Laravel - am creat o clasă abstractă care se va comporta ca clasă de bază a clasei noastre Excepționale personalizate. Creați un fișier în App / Excepții / monException.php
:
namespace App \ Excepții; utilizați excepția; clasa abstractă monException extinde excepția id protejat; protejate detalii $; funcția publică __construct ($ message) părinte :: __ construct ($ message); protejarea funcției create (array $ args) $ this-> id = array_shift ($ args); $ eroare = $ this-> erori ($ this-> id); $ this-> details = vsprintf ($ eroare ['context'], $ args); returnați $ this-> details; erori de funcționare privată ($ id) $ data = ['not_found' => ['context' => 'Resursa solicitată nu a putut fi găsită, dar poate fi din nou disponibilă în viitor. Solicitările ulterioare ale clientului sunt permise. ',] // ...]; returnează date $ [$ id];
Și clasa dvs. de Excepție:
namespace App \ Excepții; class NotFoundmonException extinde monException funcția publică __construct () $ message = $ this-> create (func_get_args ()); mamă :: __ construct ($ mesaj);
Puteți folosi clasa de mai sus în codul dvs.:
încercați aruncați noi \ App \ Exceptions \ NotFoundmonException ('not_found'); captură (\ App \ Excepții \ NotFoundmonException $ e) returnați $ e-> getMessage ();
În afară de clasa Excepție de bază Laravel, puteți utiliza pachetul de afirmații. Acesta poate fi folosit ca clasă de excepție a terților; puteți folosi acest lucru pentru a sări peste spaghete dacă
blochează codul.
Pentru a instala pachetul Assertion, trebuie să executați următoarea comandă:
compozitorul cere beberlei / assert
De exemplu, dacă doriți să verificați adresa de e-mail a unui utilizator, puteți face acest lucru:
utilizați Assert \ Assertion; utilizați Assert \ AssertionFailedException; // ... încercați Assertion :: email (valoarea $, "Valoarea trebuie să fie o adresă de e-mail valabilă"); captură (AssertionFailedException $ e) $ e-> getValue (); // valoarea care a provocat eșecul $ e-> getConstraints (); // constrângerile suplimentare ale afirmației.
Indiferent de limba pe care o alegeți să o utilizați, excepțiile sunt foarte importante pentru a înțelege, deoarece ne ajută să controlam executarea fluxului unei aplicații.
Mai mult, ele ne ajută să facem logarea problemelor atunci când apar și ne ajută să facem aplicația mai robustă.
După cum puteți vedea din lucrarea acoperită în acest tutorial, Laravel este un cadru care oferă o excelență deosebită în gestionarea excepțiilor.