Exceptionbehandlung
Zur globalen Exceptionbehandlung nutzt das Framework die Funktion
exceptionHandler.
Diese hat die Aufgabe, alle nicht abgefangenen Exceptions an zentraler Stelle zu behandeln. Zu diesem
Zweck nutzt die Funktion eine
ExceptionHandler-Komponente, die über die Registry
konfigurierbar ist. Letztere ist dann für die eigentliche Behandlung einer Exception verantwortlich.
Der Mechanismus ähnelt der im Framework integrierten
Fehlerbehandlung.
Die im APF vorkonfigurierte Exceptionbehandlung beinhaltet dabei die Speicherung der Meldung in einer
Log-Datei und die Ausgabe der nicht abgefangenen Exception inklusive des Stacktraces. Details
können der
API-Dokumentation
der Klasse
DefaultExceptionHandler entnommen werden.
Um den vorkonfigurierten
DefaultExceptionHandler durch einen eigenen zu ersetzen
muss der Registry-Offset
ExceptionHandler im Namespace
apf::core
mit der gewünschten
ExceptionHandlerDefinition ersetzt werden. Die Konfiguration
einer eigenen Exceptionbehandlungsroutine muss dabei in der Bootstrap-Datei nach dem Einbinden der
pagecontroller.php erfolgen.
Die Definition einer eigenen Exception-Behandlungskomponente gestaltet sich wie folgt:
PHP-Code
$reg = Singleton::getInstance('Registry');
$reg->register(
'apf::core',
'ExceptionHandler',
new ExceptionHandlerDefinition(
'my::exceptionhandler::namespace',
'MyExceptionHandler'
)
);
Wie aus dem Code-Beispiel zu erkennen ist, wird ein
ExceptionHandler durch seinen Namespace
und seinen Klassennamen referenziert.
Hinweis: enthält der Registry-Offset keine gültige Definition, werden
auftretende Exceptions in Text-Form ausgegeben. Der Fallback-Modus ist daran zu erkennen, dass die
Meldung mit
APF-Template
APF catchable exception:
beginnt. In diesem Fall muss die Definition oder die Implementierung der ExceptionHandler-Klasse
überprüft werden.
Um den ExceptionHandler zu deaktivieren kann der Registry-Eintrag mit
null initialisiert werden.
Um eine eigene Exceptionbehandlung einzuführen, muss die Klasse
AbstractExceptionHandler
implementiert werden. Diese definiert folgendes Interface:
PHP-Code
abstract class AbstractExceptionHandler extends coreObject
{
function handleException($exception){
}
}
Bei Auftreten einer Exception wird der Methode
handleException das Exception-Objekt
übergeben. Da die Exceptionbehandlung in einer eigenen Klasse stattfindet, die nicht mit dem
ServiceManager erzeugt wurde, steht der Zugriff auf den aktuellen
Context und die
aktuelle
Sprache nicht zur Verfügung!
Sollten diese Informationen für die Behandlung der Exception notwendig sein, müssen diese
über in einer Applikation verfügbaren Informationscontainer (z.B. Model-Klasse eines Modules)
bezogen werden. Der Umgebungsparameter steht wie in der Dokumentation beschrieben über die
Registry zur Verfügung.
Der globale Exception-Behandlungsmechanismus kann einfach durch folgenden PHP-Code genutzt werden:
PHP-Code
throw new Exception('My application exception');
Vorraussetzung dabei ist, dass die durch den Code geworfene Exception nicht durch ein
try-catch-Konstrukt abgefangen wird!
Details können der Online-Dokumentation unter
http://php.net/exception und
http://php.net/exceptions
entnommen werden.
Kommentare
Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese
hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.