Wtyczki Wprowadzenie Architektura kontrolera zawiera także system wtyczek, który pozwala programiście na wykonanie własnego kodu, gdy następują określone zdarzenia w trakcie trwania procesu kontrolera. Kontroler frontowy używa agenta wtyczek jako rejeestru dla wtyczek programisty, a agent wtyczek jest odpowiedzialny za to, że metody zdarzeń są wywoływane dla każdej wtyczki zarejestrowanej w kontrolerze frontowym. Metody zdarzeń są zdefiniowane w klasie abstrakcyjnej Zend_Controller_Plugin_Abstract, z której dziedziczy każda klasa wtyczki: Metoda routeStartup() jest wywoływana zanim Zend_Controller_Front wywoła router w celu sprawdzenia żądania pod kątem zarejestrowanych tras. Metoda routeShutdown() jest wywoływana po tym jak router zakończy routing żądania. Metoda dispatchLoopStartup() jest uruchamiana zanim Zend_Controller_Front zacznie pętlę uruchamiania. Metoda preDispatch() jest wywoływana zanim akcja zostanie uruchomiona przez obiekt uruchamiający. Pozwala to na stworzenie funkcjonalności proxy lub filtra. Nadpisując żądanie i resetując flagę uruchomienia (za pomocą Zend_Controller_Request_Abstract::setDispatched(false)), obecna akcja może być pominięta lub zastąpiona. postDispatch() jest wywoływana po tym jak akcja zostanie uruchomiona przez obiekt uruchamiający. Pozwala to na stworzenie funkcjonalności proxy lub filtra. Nadpisując żądanie i resetując flagę uruchomienia (za pomocą Zend_Controller_Request_Abstract::setDispatched(false)), można określić nową akcję do uruchomienia. Metoda dispatchLoopShutdown() jest wywoływana po tym jak Zend_Controller_Front zakończy pętlę uruchamiania. Pisanie wtyczek W celu napisania klasy wtyczki, w prosty sposób rozszerz klasę abstrakcyjną Zend_Controller_Plugin_Abstract: Żadna z metod klasy Zend_Controller_Plugin_Abstract nie jest abstrakcyjna, co oznacza, że nie jest konieczne implementowanie wszystkich dostępnych metod zdarzeń opisanych powyżej. Autor wtyczki może zaimplementować tylko te metody zdarzeń, które są mu rzeczywiście potrzebne. Zend_Controller_Plugin_Abstract udostępnia także obiekty żądania i odpowiedzi wtyczkom kontrolera za pomocą metod getRequest() oraz getResponse(), odpowiednio. Użycie wtyczek Klasy wtyczek są rejestrowane za pomocą metody Zend_Controller_Front::registerPlugin() i mogą być rejestrowane w dowolnym momencie. Poniższy kod pokazuje w jaki sposób wtyczka może być użyta przez kontroler: getResponse()->appendBody("

Wywołano metodę routeStartup()

\n"); } public function routeShutdown(Zend_Controller_Request_Abstract $request) { $this->getResponse()->appendBody("

Wywołano metodę routeShutdown()

\n"); } public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { $this->getResponse()->appendBody("

Wywołano metodę dispatchLoopStartup()

\n"); } public function preDispatch(Zend_Controller_Request_Abstract $request) { $this->getResponse()->appendBody("

Wywołano metodę preDispatch()

\n"); } public function postDispatch(Zend_Controller_Request_Abstract $request) { $this->getResponse()->appendBody("

Wywołano metodę postDispatch()

\n"); } public function dispatchLoopShutdown() { $this->getResponse()->appendBody("

Wywołano metodę dispatchLoopShutdown()

\n"); } } $front = Zend_Controller_Front::getInstance(); $front->setControllerDirectory('/path/to/controllers') ->setRouter(new Zend_Controller_Router_Rewrite()) ->registerPlugin(new MyPlugin()); $front->dispatch(); ]]>
Zakładając, że żadne wywołana akcja nie wyświetliła żadnych danych, i że tylko jedna akcja została wywołana, to funkcjonalność powyższej wtyczki spowoduje wyświetlenie takich danych: Wywołano metodę routeStartup()

Wywołano metodę routeShutdown()

Wywołano metodę dispatchLoopStartup()

Wywołano metodę preDispatch()

Wywołano metodę postDispatch()

Wywołano metodę dispatchLoopShutdown()

]]>
Wtyczki mogą być zarejestrowane w dowolnym momencie podczas uruchomienia kontrolera frontowego. Jednak jeśli zdarzenie dla którego we wtyczce była zarejestrowana metoda już minęło, to metoda ta będzie ominięta.
Wtyczki dołączone do standardowej dystrybucji Zend Framework w standardowej dystrybucji zawiera wtyczkę służącą do obsługi błędów.