În tutorialul de astăzi, vă voi prezenta modul de gestionare a erorilor și excepțiilor de la Yii și vă voi îndruma în câteva scenarii introductive.
Te intrebi ce este Yii? Consultați Introducerea noastră în Cadrul Yii și programarea cu seria Yii2.
Erori sunt defecte neașteptate în codul nostru descoperit adesea de către utilizatori. Ei vor rupe, de obicei, executarea programului. Este important nu numai să rupă grațios pentru utilizator, ci să informeze dezvoltatorul despre problema, astfel încât să poată fi rezolvată.
Excepțiile sunt create de dezvoltator atunci când apare o condiție de eroare potențial previzibilă. În codul în care s-ar putea produce o excepție, dezvoltatorul poate arunca () o excepție de la un robot de eroare robust.
În Yii, erorile PHP non-fatale (de exemplu, avertismente și notificări) sunt direcționate către excepții care pot fi detectate, astfel încât să puteți decide cum să reacționați și să le răspundeți. Puteți desemna o acțiune a controlorului pentru a procesa toate aceste excepții. Și puteți personaliza formatul de afișare pentru erori, de ex. HTML, JSON, XML, etc.
Excepțiile și erorile fatale ale PHP pot fi evaluate numai în modul de depanare. În aceste tipuri de scenarii de dezvoltare, Yii poate afișa informații stack detaliate de apeluri și segmente de cod sursă (puteți vedea acest lucru mai sus în imaginea titlului).
Erorile fatale sunt genul de evenimente care încalcă executarea aplicației. Acestea includ lipsa memoriei, instanțierea unui obiect al unei clase care nu există sau chemarea unei funcții care nu există.
De exemplu:
$ t = nou Obiect necunoscut ();
Să începem cu câteva exemple de tratare a erorilor și a excepțiilor.
Mai întâi, configurați aplicația noastră în frontend / config / main.php. Ergonomul de eroare este definit ca o componentă, după cum se arată mai jos. Acest exemplu este din aplicația mea de lansare în serie, Planificatorul întâlnirilor. Observați ErrorHandler
configurație în componente
:
'mp-frontend', 'name' => 'Planificator de întâlniri', 'basePath' => dirname (__ DIR__), 'bootstrap' => > 'frontend \ controllers', 'catchAll' => [], 'components' => ['assetManager' => [...], ... 'errorHandler' => '=> 20,], ...],];
În exemplul de mai sus, errorAction
direcționează utilizatorul la acțiunea de eroare a SiteController.
În general, Yii oferă o varietate de opțiuni de configurare pentru ErrorHandler
pentru redirecționare și culegere de date:
Proprietate | Tip | Descriere |
---|---|---|
$ callStackItemView | şir | Calea fișierului de vizualizare pentru excepțiile de randare și erorile elementului stack de apeluri. de exemplu. '@ Yii / opinii / ErrorHandler / callStackItem.php' |
$ displayVars | mulțime | Lista variabilelor predefinite PHP care ar trebui afișate pe pagina de eroare. de exemplu. ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION'] |
$ errorAction | şir | Traseul (de ex. site / eroare ) la acțiunea controlerului care va fi utilizată pentru afișarea erorilor externe. |
$ errorView | şir | Calea fișierului de vizualizare pentru redarea excepțiilor fără informații despre stiva apelurilor. de exemplu. '@ Yii / opinii / ErrorHandler / error.php' |
$ exceptionView | şir | Calea fișierului de vizualizare pentru redarea excepțiilor. de exemplu. '@ Yii / opinii / ErrorHandler / exception.php' |
$ maxSourceLines | întreg | Numărul maxim de linii de cod sursă care trebuie afișate. |
$ maxTraceSourceLines | întreg | Numărul maxim de linii de cod sursă care urmează să fie afișate. |
$ previousExceptionView | şir | Calea fișierului de vizualizare pentru redarea excepțiilor anterioare. de exemplu. '@ Yii / opinii / ErrorHandler / previousException.php' |
În general, atunci când un utilizator întâlnește o eroare gravă, dorim să îi redirecționăm către o pagină eronată, descriptivă.
Asta e ceea ce errorAction
în ErrorHandler
face. Se redirecționează către acțiunea noastră SiteControllerError:
return ['componente' => ['errorHandler' => ['errorAction' => 'site / error',]]];
În SiteController, definim explicit eroare
acțiune:
namespace app \ controllers; utilizați Yii; utilizați yii \ web \ Controller; clasa SiteController extinde controlerul public action actions () return ['error' => ['class' => 'yii \ web \ ErrorAction',];];
Iată un handler de eroare de bază (puteți citi mai multe despre acestea aici):
funcția publică funcțiaError () $ exception = Yii :: $ app-> errorHandler-> excepție; dacă ($ excepție! == null) return $ this-> render ('error', ['excepție' => $ excepție]);
De asemenea, puteți răspunde diferit dacă există o eroare sau dacă cererea de pagină nu există în aplicația dvs.:
funcția publică funcțiaError () $ exception = Yii :: $ app-> errorHandler-> excepție; dacă ($ excepție instanță \ yii \ web \ NotFoundHttpException) // toți controlorii + acțiuni non-existente se vor termina aici return $ this-> render ('pnf'); // pagina nu a fost găsită altceva return $ this-> render ('error', ['exception' => $ exception]);
Iată pagina mea curentă care nu a fost găsită 404 de eroare:
Puteți include teoretic o hartă a site-urilor de linkuri, pagini sugerate similare solicitării de pagină, o funcție de căutare și un link de asistență pentru contact pe paginile de eroare. Toate acestea pot ajuta utilizatorul să se recupereze și să se miște cu grație.
Iată pagina mea generală de eroare (evident că am caracteristici de adăugat):
Dacă vrem să monitorizăm o secțiune de cod pentru probleme, putem folosi un blocaj de captură PHP try. Mai jos, vom experimenta declanșând o diviziune fatală prin eroare zero:
utilizați Yii; utilizați yii \ base \ ErrorException; ... încercați 10/0; captură (ErrorException $ e) Yii :: warning ("Diviziunea prin zero"); ...
captură
Răspunsul de mai sus este generarea unui avertisment pentru jurnal. Yii are logistică extinsă:
Dacă, în loc să vă înregistrați un eveniment, doriți să direcționați utilizatorul către pagina de eroare pe care am configurat-o mai devreme, aveți posibilitatea să aruncați o excepție cu evenimentul:
utilizați yii \ web \ NotFoundHttpException; arunca noua NotFoundHttpException ();
Iată un exemplu în care aruncăm o excepție cu un anumit cod de stare HTTP și un mesaj personalizat:
încercați 10/0; catch (ErrorException $ e) arunca noua \ yii \ web \ HttpException (451, "Umorul lui Tom McFarlin este deseori pierdut pe mine (si multi oameni).
Iată cum arată acest cod utilizatorului:
Toate erorile din Yii sunt înregistrate în funcție de modul în care le-ați setat. Ați putea fi, de asemenea, interesat de tutorialul meu despre Sentry și Rollbar pentru conectarea la Yii:
Sper că v-ați bucurat de explorarea erorilor și a manipulării excepțiilor. Urmăriți tutorialele viitoare în programul nostru de programare cu seria Yii2 în timp ce continuăm să vă scufundăm în diferite aspecte ale cadrului.
Dacă doriți să vă aruncați o privire mai profundă în dezvoltarea de aplicații Yii, verificați seria noastră Building Your Startup With PHP care utilizează șablonul avansat al lui Yii2. Se spune povestea programării fiecărei etape a planificatorului de întâlniri. Este foarte util dacă doriți să aflați despre construirea aplicațiilor din Yii de la început.
Dacă doriți să știți când vine următorul tutorial Yii2, urmați-mă @lookahead_io pe Twitter sau verificați pagina de instructor.