Im heutigen Tutorial werde ich Yiis Fehler- und Ausnahmebehandlung vorstellen und Sie durch einige einleitende Szenarien führen.
Fragst du dich, was Yii ist? Schauen Sie sich unsere Einführung in das Yii-Framework und die Programmierung mit der Yii2-Serie an.
Fehler sind unerwartete Fehler in unserem Code, die häufig von Benutzern entdeckt werden. Sie werden normalerweise die Programmausführung unterbrechen. Es ist wichtig, nicht nur für den Benutzer ordnungsgemäß zu brechen, sondern den Entwickler über das Problem zu informieren, damit er behoben werden kann.
Ausnahmen werden vom Entwickler erstellt, wenn ein möglicherweise vorhersehbarer Fehlerzustand auftritt. In Code, in dem eine Ausnahme auftreten kann, kann der Entwickler eine Ausnahme für einen robusten Fehlerhandler auslösen.
In Yii werden nicht schwerwiegende PHP-Fehler (z. B. Warnungen und Hinweise) in abfangbare Ausnahmen geroutet, sodass Sie entscheiden können, wie sie reagieren und darauf reagieren möchten. Sie können eine Controller-Aktion festlegen, um alle diese Ausnahmen zu verarbeiten. Und Sie können das Anzeigeformat für Fehler anpassen, z. HTML, JSON, XML usw.
Ausnahmen und schwerwiegende PHP-Fehler können nur im Debug-Modus bewertet werden. In diesen Arten von Entwicklungsszenarien kann Yii detaillierte Informationen zum Anrufstapel und Quellcodesegmente anzeigen (Sie können dies oben im Titelbild sehen).
Schwerwiegende Fehler sind Ereignisse, die die Ausführung von Anwendungen beeinträchtigen. Dazu gehören nicht genügend Arbeitsspeicher, das Instanziieren eines Objekts einer nicht vorhandenen Klasse oder das Aufrufen einer nicht vorhandenen Funktion.
Zum Beispiel:
$ t = neues unbekanntes Objekt ();
Beginnen wir mit einigen Beispielen für die Fehler- und Ausnahmebehandlung.
Zuerst konfigurieren wir unsere Anwendung in frontend / config / main.php. Der errorHandler ist als Komponente definiert (siehe unten). Dieses Beispiel stammt aus meiner Startserienanwendung Meeting Planner. Beachten Sie die errorHandler
Konfiguration in Komponenten
:
'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,],…],];
Im obigen Beispiel, errorAction
Leitet den Benutzer zur Fehleraktion meines SiteControllers.
Allgemein bietet Yii eine Vielzahl von Konfigurationsoptionen für errorHandler
zur Weiterleitung und Datenerfassung:
Eigentum | Art | Beschreibung |
---|---|---|
$ callStackItemView | Schnur | Der Pfad der View-Datei für das Rendern von Ausnahmen und Fehlern ruft das Stack-Element auf. z.B. '@ yii / views / errorHandler / callStackItem.php' |
$ displayVars | Array | Liste der vordefinierten PHP-Variablen, die auf der Fehlerseite angezeigt werden sollen. z.B. ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION'] |
$ errorAction | Schnur | Die Route (z. Standort / Fehler ) auf die Controller-Aktion, die zur Anzeige externer Fehler verwendet wird. |
$ errorView | Schnur | Der Pfad der View-Datei zum Rendern von Ausnahmen ohne Aufrufstapelinformationen. z.B. '@ yii / views / errorHandler / error.php' |
$ exceptionView | Schnur | Der Pfad der View-Datei zum Rendern von Ausnahmen. z.B. '@ yii / views / errorHandler / exception.php' |
$ maxSourceLines | ganze Zahl | Maximale Anzahl der anzuzeigenden Quellcodezeilen. |
$ maxTraceSourceLines | ganze Zahl | Maximale Anzahl der Trace-Quellcodezeilen, die angezeigt werden sollen. |
$ previousExceptionView | Schnur | Der Pfad der Ansichtsdatei zum Rendern vorheriger Ausnahmen. z.B. '@ yii / views / errorHandler / previousException.php' |
Wenn ein Benutzer auf einen schwerwiegenden Fehler stößt, möchten wir ihn im Allgemeinen auf eine benutzerfreundliche, beschreibende Fehlerseite umleiten.
Das ist was der errorAction
im errorHandler
tut. Es leitet auf den actionError unseres SiteControllers um:
return ['components' => ['errorHandler' => ['errorAction' => 'site / error',],]];
In unserem SiteController definieren wir eine explizite Error
Aktion:
Namespace-App \ Controller; benutze Yii; benutze yii \ web \ Controller; Klasse SiteController erweitert Controller public function actions () return ['error' => ['class' => 'yii \ web \ ErrorAction',],];
Hier ist ein grundlegender Fehlerbehandler (Sie können hier mehr darüber lesen):
öffentliche Funktion actionError () $ exception = Yii :: $ app-> errorHandler-> exception; if ($ exception! == null) return $ this-> render ('error', ['exception' => $ exception]);
Sie können auch anders reagieren, ob ein Fehler vorliegt oder ob die Seitenanforderung in Ihrer Anwendung nicht vorhanden ist:
öffentliche Funktion actionError () $ exception = Yii :: $ app-> errorHandler-> exception; if ($ Ausnahmeinstanz von \ yii \ web \ NotFoundHttpException) // Alle nicht vorhandenen Controller + Aktionen werden hier beendet. $ this-> render ('pnf'); // Seite nicht gefunden else return $ this-> render ('error', ['exception' => $ exception]);
Hier ist meine aktuelle 404-Fehlerbehandlungsroutine:
Sie könnten theoretisch eine Übersichtskarte mit Links, vorgeschlagenen Seiten ähnlich der Seitenanforderung, eine Suchfunktion und einen Kontakt-Support-Link auf Ihren Fehlerseiten einfügen. All dies kann dem Benutzer helfen, sich zu erholen und elegant weiterzugehen.
Hier ist meine aktuelle allgemeine Fehlerseite (Natürlich habe ich Features, die ich hinzufügen kann):
Wenn wir einen Codeabschnitt auf Probleme überwachen möchten, können wir einen PHP-Try-Catch-Block verwenden. Im Folgenden werden wir experimentieren, indem Sie eine fatale Division durch einen Null-Fehler auslösen:
benutze Yii; Verwenden Sie yii \ base \ ErrorException;… try 10/0; catch (ErrorException $ e) Yii :: warning ("Division by zero."); …
Das Fang
Die obige Antwort besteht darin, eine Warnung für das Protokoll zu generieren. Yii verfügt über umfangreiche Protokollierung:
Wenn Sie den Benutzer nicht zum Protokollieren eines Ereignisses auf die zuvor konfigurierte Fehlerseite weiterleiten möchten, können Sie mit dem Ereignis eine Ausnahme auslösen:
Verwenden Sie yii \ web \ NotFoundHttpException. werfen Sie neue NotFoundHttpException () aus;
Hier ein Beispiel, in dem wir eine Ausnahme mit einem bestimmten HTTP-Statuscode und einer angepassten Nachricht auslösen:
versuchen Sie es mit 10/0; catch (ErrorException $ e) wirft neue \ yii \ web \ HttpException (451, 'Tom McFarlins Humor geht mir oft verloren (und vielen Leuten).');
So sieht der Code für den Benutzer aus:
Alle Fehler in Yii werden protokolliert, je nachdem, wie Sie sie eingerichtet haben. Vielleicht interessiert Sie auch mein Tutorial zu Sentry und Rollbar für das Loggen in Yii:
Ich hoffe, Ihnen hat unsere Untersuchung der Fehler- und Ausnahmebehandlung gefallen. Achten Sie auf kommende Tutorials in unserer Programmierserie "Programmieren mit Yii2", während wir uns weiter mit verschiedenen Aspekten des Frameworks beschäftigen.
Wenn Sie einen tieferen Einblick in die Entwicklung von Yii-Anwendungen wünschen, sehen Sie sich unsere Serie "Your Startup With PHP" an, die die erweiterte Vorlage von Yii2 verwendet. Es erzählt die Geschichte der Programmierung jedes Schrittes des Meeting Planner. Dies ist sehr nützlich, wenn Sie von Anfang an mehr über das Erstellen von Anwendungen in Yii erfahren möchten.
Wenn Sie wissen möchten, wann das nächste Yii2-Tutorial ankommt, folgen Sie mir auf Twitter auf @lookahead_io oder besuchen Sie meine Instructor-Seite.