ErrorHandler in ZF mit M/C/A
Das Zend-Framework, bietet eine Menge Features, Funktionen, Klassen und so weiter. Das ist auch alles schön und gut, nur leider fehlt an einigen Stellen eine gewisse Konsistenz. Dies ist zum Beispiel der Fall, wenn Ihr das ErrorHandler-Plugin in Eurer MVC-Applikation benutzen wollt. Konkret meine ich Folgendes: Ruft man einen Controller auf, der nicht existiert wird man auf den ErrorController - also die Fehlerseite - weitergeleitet. Selbiges geschieht, wenn man eine Action aufruft, die in einem Controller nicht existiert. Doch was ist, wenn man ein Modul aufruft, welches nicht existiert?! - Man wird nicht wie zu erwarten ebenfalls auf den ErrorController weitergeleitet, sondern auf das Default-Module. Dieses Verhalten, kann in Produktivumgebungen meiner Meinung nach nicht gewünscht sein. Nachdem ich mich längere Zeit eben mit diesem Verhalten herumärgern musste, habe ich gestern ein offenes Ticket dazu gefunden, genauso wie eine temporäre Lösung in den Kommentaren des Tickets. Diese Lösung möchte ich an dieser Stelle wiedergeben.
Die Lösung besteht daraus die Dispatcher-Klasse des Frameworks zu überschreiben, konkret die Methode getDefaultControllerClass. Danach muss anstatt dem Standard-Dispatcher natürlich der eigene verwendet werden. Es folgt ein Beispiel:
<?php // Eigene Dispatcher-Klasse class My_Controller_Dispatcher_Standard extends Zend_Controller_Dispatcher_Standard { public function getDefaultControllerClass(Zend_Controller_Request_Abstract $request) { throw new Zend_Controller_Dispatcher_Exception('Invalid request-uri!'); } } // Im Frontend $front = Zend_Controller_Front::getInstance(); $myDispatcher = new My_Controller_Dispatcher_Standard(); $front->setDispatcher($myDispatcher);
Hier geht's übrigens zum besagtem Ticket im Zend-Framework Issue Tracker.
[Alex Sawallich @ 04.07.2011 - 22:25:49h]




Comments
Unfortunately there are no comments yet :(. Be the first to post a comment by using the form beneath.