Plugin

Plugin 需要繼承 Zend_Controller_Plugin_Abstract,跟一般所知的 plugin 一樣,都是用觀察者模式實作。官方有提供 Example 如下:

class Application_Plugin_Test extends Zend_Controller_Plugin_Abstract
{
    /**
     * 在 FrontController 開始要分析 request 並送到 router 之前執行
     */
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>routeStartup() called</p>\n");
    }

    /**
     * 在 FrontController 分析完 router 之後執行
     */
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>routeShutdown() called</p>\n");
    }

    /**
     * 在 FrontController 開始進入分派迴圈之前執行
     */
    public function dispatchLoopStartup(
        Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>dispatchLoopStartup() called</p>\n");
    }

    /**
     * 在 FrontController 分派 action 之前執行
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>preDispatch() called</p>\n");
    }

    /**
     * 在 FrontController 分派 action 之後執行
     */
    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>postDispatch() called</p>\n");
    }


    /**
     * 在 FrontController 離開分派迴圈之後執行
     */
    public function dispatchLoopShutdown()
    {
        $this->getResponse()
             ->appendBody("<p>dispatchLoopShutdown() called</p>\n");
    }
}

Zend Framework 有預設 plugin 放的位置,可參考 Resource Autoloader

再來就是要註冊 plugin,用程式碼註冊的方法:

$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Plugin_Test());

application.ini 註冊的方法:

resources.frontController.plugins[] = Application_Plugin_Test