MVC Ausnahmen
Einführung
Die MVC Komponenten im Zend Framework verwenden einen Front
Controller, was bedeutet das alle Anfragen zu einer bestimmten Site über einen
einzelnen Eintrittspunkt laufen. Als Ergebnis treten alle Ausnahmen eventuell am Front
Controllerauf, was es Entwicklern erlaubt diese an einem einzelnen Ort zu behandeln.
Trotzdem enthalten Ausnahmemeldungen und Backtrace Informationen oft sensitive
Systeminformationen, wie SQL Anweisungen, Dateiorte, und andere. Um
zu helfen die eigene Site zu schützen, werden standardmäßig alle Ausnahmen von
Zend_Controller_Front gefangen und im Antwortobjekt registriert;
zusätzlich zeigt das Antwortobjekt die Ausnahmemeldungen standardmäßig nicht an.
Behandeln von Ausnahmen
Verschiedene Mechanismen sind bereits in die MVC Komponenten
eingebaut um die Behandlung von Ausnahmen zu erlauben.
-
Standardmäßig ist das
Error Handler
Plugin registriert und aktiv. Dieses Plugin wurde erstellt um
folgendes zu behandeln:
Es arbeitet als postDispatch() Plugin und prüft ob
eine Dispatcher, Actioncontroller oder andere Ausnahme aufgetreten ist. Wenn
das so ist, leitet es an den Error Handler Controller weiter.
Dieser Handler deckt die meisten Ausnahmesituationen ab, und behandelt fehlende
Controller und Aktionen taktvoll.
-
Zend_Controller_Front::throwExceptions()
Durch die Übergabe eines boolschen TRUE Wertes an diese
Methode, kann dem Front Controller mitgeteilt werden das, statt der Ansammlung
der Ausnahmen im Antwortobjekt oder der Verwendung des Error Handler Plugin's,
man diese Ausnahmen selbst behandeln will. Als Beispiel:
span style="color: #808080; font-style: italic;">// Ausnahmen selbst behandeln
}
Diese Methode ist möglicherweise der einfachste Weg um eigene
Ausnahmebehandlungen hinzuzufügen die den vollen Umfang der möglichen Ausnahmen
der Front Controller Anwendung behandeln.
-
Zend_Controller_Response_Abstract::renderExceptions()
Durch die Übergabe eines boolschen TRUE Wertes an diese
Methode kann dem Antwortobjekt mitgeteilt werden das es Ausnahmenachrichten und
Backtrace darstellen soll, wenn es selbst dargestellt wird. In diesem Szenario
wird jede Ausnahme die an der Anwendung auftritt angezeigt. Das wird nur in
nicht-produktiven Umgebungen vorgeschlagen.
-
Zend_Controller_Front::returnResponse() und
Zend_Controller_Response_Abstract::isException().
Durch die Übergabe eines boolschen TRUE an
Zend_Controller_Front::returnResponse(), wird
Zend_Controller_Front::dispatch() die Antwort nicht
darstellen, aber diese stattdessen zurückgeben. Sobald man die antwort hat,
kann diese getestet werden um zu sehen ob irgendwelche Ausnahmen gefangen
wurden indem die isException() Methode verwendet, und
die Ausnahme über die getException() Methode empfangen
wird. Als Beispiel:
span style="color: #808080; font-style: italic;">// Ausnahme behandeln ...
Der primäre Vorteil welche diese Methode über
Zend_Controller_Front::throwExceptions() bietet ist,
das Sie es erlaubt die Antwort wahlweise darzustellen nachdem die Ausnahme
behandelt wurde. Das fängt jede Ausnahme in der Controllerkette, im Gegensatz
zum Error Handler Plugin.
MVC Ausnahme die auftreten können
Die verschiedenen MVC Komponenten -- Anfragen, Router, Dispatcher,
Actioncontroller, und Antwortobjekte -- können alle gelegentlich Ausnahmen werfen.
Einige Ausnahmen können wahlweise überschrieben werden und andere werden Verwendet um
dem Entwickler anzuzeigen das die eigene Struktur der Anwendung überdacht werden
sollte.
Einige Beispiele:
|
|