So behandeln Sie Fehler und Ausnahmen im Yii-Framework

Was Sie erstellen werden

Einführung

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.

Was ist der Unterschied zwischen Fehlern und Ausnahmen?? 

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.

Wie verwaltet Yii diese??

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.

Fehler- und Ausnahmebehandlung konfigurieren

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'

Verwenden von errorActions zur direkten Ausführung

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):

Ausnahmen fangen

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:

  • Yii :: trace (): Protokolliert eine Nachricht, um zu verfolgen, wie ein Codeabschnitt ausgeführt wird. Hauptsächlich für die Entwicklung.
  • Yii :: info (): Protokolliert eine Nachricht, die Informationen über das Ereignis enthält.
  • Yii :: warning (): Protokolliert eine Warnmeldung, dass ein unerwartetes Ereignis aufgetreten ist
  • Yii :: error (): protokolliert einen schwerwiegenden Fehler zur Untersuchung

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:

Über die Protokollierung von Yii

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:

  • Aufbau Ihres Startups: Fehlerprotokollierung

    Das Auffinden von Produktionsfehlern kann ohne korrekte Fehlerbehandlung oder einen Cloud-basierten Protokollierungsdienst schwierig sein. Ich habe zwei probiert. Folgen Sie und erfahren Sie, wie Sie protokollieren…
    Jeff Reifman
    Yii

Abschließend

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.

ähnliche Links

  • Dokumentation für yii \ web \ ErrorHandler
  • Fehlerbehandlung (Das endgültige Handbuch zu Yii 2.0)
  • Protokollierung (Das endgültige Handbuch zu Yii 2.0)
  • Yii2 Developer Exchange (Ressourcen-Site des Autors)