Nel tutorial di oggi, presenterò l'errore e la gestione delle eccezioni di Yii e ti guiderò attraverso alcuni scenari introduttivi.
Ti chiedi cosa sia Yii? Scopri la nostra Introduzione al framework e alla programmazione Yii con la serie Yii2.
Gli errori sono difetti imprevisti nel nostro codice spesso scoperti prima dagli utenti. Solitamente interrompono l'esecuzione del programma. È importante non solo rompere con grazia per l'utente, ma informare lo sviluppatore del problema in modo che possa essere corretto.
Le eccezioni vengono create dallo sviluppatore quando si verifica una condizione di errore potenzialmente prevedibile. Nel codice in cui potrebbe verificarsi un'eccezione, lo sviluppatore può lanciare () un'eccezione a un gestore di errori affidabile.
In Yii, gli errori PHP non fatali (ad esempio avvertimenti e notifiche) vengono instradati in eccezioni intercettabili in modo che tu possa decidere come reagire e rispondere ad essi. È possibile designare un'azione del controllore per elaborare tutte queste eccezioni. E puoi personalizzare il formato di visualizzazione degli errori, ad es. HTML, JSON, XML, ecc.
Eccezioni e errori fatali di PHP possono essere valutati solo in modalità di debug. In questi tipi di scenari di sviluppo, Yii può visualizzare informazioni dettagliate sullo stack delle chiamate e segmenti di codice sorgente (puoi vedere questo sopra nell'immagine del titolo).
Gli errori irreversibili sono il tipo di eventi che interrompono l'esecuzione dell'applicazione. Questi includono memoria insufficiente, istanziando un oggetto di una classe che non esiste o chiamando una funzione che non esiste.
Per esempio:
$ t = new Unknownobject ();
Iniziamo con alcuni esempi di gestione degli errori e delle eccezioni.
Per prima cosa configuriamo la nostra applicazione in frontend / config / main.php. ErrorHandler è definito come un componente, come mostrato di seguito. Questo esempio proviene dalla mia applicazione di serie di avvio, Meeting Planner. Notare il errorHandler
configurazione in componenti
:
'mp-frontend', 'name' => 'Meeting Planner', 'basePath' => dirname (__ DIR__), 'bootstrap' => ['log', '\ common \ components \ SiteHelper'], 'controllerNamespace' = > 'frontend \ controller', 'catchAll' => [], 'components' => ['assetManager' => [...], ... 'errorHandler' => ['errorAction' => 'site / error', 'maxSourceLines '=> 20,], ...],];
Nell'esempio sopra, ErrorAction
indirizza l'utente all'azione di errore del mio SiteController.
Più in generale, Yii offre una varietà di opzioni di configurazione per errorHandler
per il reindirizzamento e la raccolta dei dati:
Proprietà | genere | Descrizione |
---|---|---|
$ callStackItemView | stringa | Il percorso del file di visualizzazione per il rendering di eccezioni e errori richiama l'elemento stack. per esempio. '@ Yii / views / errorHandler / callStackItem.php' |
$ displayVars | schieramento | Elenco delle variabili predefinite di PHP che dovrebbero essere visualizzate nella pagina di errore. per esempio. ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION'] |
$ ErrorAction | stringa | La rotta (ad es. sito / errore ) all'azione del controller che verrà utilizzata per visualizzare errori esterni. |
$ ErrorView | stringa | Il percorso del file di visualizzazione per il rendering di eccezioni senza informazioni sullo stack di chiamata. per esempio. '@ Yii / views / errorHandler / error.php' |
$ exceptionView | stringa | Il percorso del file di visualizzazione per il rendering delle eccezioni. per esempio. '@ Yii / views / errorHandler / exception.php' |
$ maxSourceLines | numero intero | Numero massimo di linee di codice sorgente da visualizzare. |
$ maxTraceSourceLines | numero intero | Numero massimo di linee di codice sorgente di traccia da visualizzare. |
$ previousExceptionView | stringa | Il percorso del file di visualizzazione per il rendering delle eccezioni precedenti. per esempio. '@ Yii / views / errorHandler / previousException.php' |
In genere, quando un utente incontra un errore grave, vogliamo reindirli a una pagina di errore descrittiva e amichevole.
Questo è ciò che ErrorAction
nel errorHandler
lo fa. Reindirizza all'azione del nostro SiteError:
return ['components' => ['errorHandler' => ['errorAction' => 'site / error',],]];
Nel nostro SiteController, definiamo un esplicito errore
azione:
app namespace \ controller; usare Yii; utilizzare yii \ web \ Controller; class SiteController estende Controller public function actions () return ['error' => ['class' => 'yii \ web \ ErrorAction',],];
Ecco un gestore di errori di base (puoi leggere ulteriori informazioni su questi qui):
funzione pubblica actionError () $ exception = Yii :: $ app-> errorHandler-> eccezione; if ($ exception! == null) return $ this-> render ('error', ['exception' => $ exception]);
Puoi anche rispondere in modo diverso se c'è un errore o se la richiesta di pagina non esiste nella tua applicazione:
funzione pubblica actionError () $ exception = Yii :: $ app-> errorHandler-> eccezione; if ($ exception instanceof \ yii \ web \ NotFoundHttpException) // tutti i controller non esistenti + azioni finiranno qui return $ this-> render ('pnf'); // pagina non trovata else return $ this-> render ('error', ['exception' => $ exception]);
Ecco il mio attuale gestore di errori 404 Pagina non trovata:
In teoria, potresti includere una mappa del sito di collegamenti, pagine suggerite simili alla richiesta di pagina, una funzione di ricerca e un link di supporto per i contatti nelle tue pagine di errore. Tutti questi possono aiutare l'utente a recuperare e muoversi con garbo.
Ecco la mia pagina di errore generale corrente (Ovviamente ho delle caratteristiche da aggiungere):
Se vogliamo monitorare una sezione di codice per problemi, possiamo usare un blocco catch di PHP. Di seguito, sperimenteremo attivando una divisione fatale per errore zero:
usare Yii; usa yii \ base \ ErrorException; ... prova 10/0; catch (ErrorException $ e) Yii :: warning ("Divisione per zero."); ...
Il catturare
risposta sopra è di generare un avviso per il registro. Yii ha un ampio log:
Se, invece di registrare un evento, desideri indirizzare l'utente alla pagina di errore che abbiamo configurato in precedenza, puoi generare un'eccezione con l'evento:
utilizzare yii \ web \ NotFoundHttpException; lanciare la nuova NotFoundHttpException ();
Ecco un esempio in cui viene generata un'eccezione con uno specifico codice di stato HTTP e un messaggio personalizzato:
prova 10/0; catch (ErrorException $ e) throw new \ yii \ web \ HttpException (451, l'umorismo di Tom McFarlin è spesso perso su di me (e molte persone). ');
Ecco come appare il codice per l'utente:
Tutti gli errori in Yii vengono registrati in base a come li hai impostati. Potresti anche essere interessato al mio tutorial su Sentry e Rollbar per l'accesso a Yii:
Spero ti sia piaciuta la nostra esplorazione dell'errore e della gestione delle eccezioni. Guarda le prossime esercitazioni nella nostra serie Programming With Yii2 mentre continuiamo a esplorare i diversi aspetti del framework.
Se desideri vedere un tuffo più profondo nello sviluppo di applicazioni Yii, consulta la nostra serie Building Your Startup with PHP che utilizza il modello avanzato di Yii2. Racconta la storia della programmazione di ogni fase di Meeting Planner. È molto utile se vuoi imparare a costruire applicazioni in Yii da zero.
Se vuoi sapere quando arriverà il prossimo tutorial di Yii2, seguimi su @lookahead_io su Twitter o controlla la mia pagina di istruttore.