Miles' Blog

天涯何處無幹話,何必要講實務話

Plugin

Start

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

Reference

0%