Zend FrameworkのControllerにPluginとして色々な処理を組み込めます。
PluginはDispatcherの色々なアクションにロジックを追加できます。
- routeStartup() は、Zend_Controller_Front が ルータ をコールしてルートに対するリクエストの評価を始める前にコールされます。
- routeShutdown() は、 ルータ がリクエストのルーティングを終了した後にコールされます。
- dispatchLoopStartup() は、Zend_Controller_Front がディスパッチループに入る前にコールされます。
- preDispatch() は、アクションが ディスパッチャ でディスパッチされる前にコールされます。 このコールバックは、プロキシやフィルタ的な動作をさせることができます。 リクエストの内容を変更してディスパッチフラグをリセット (Zend_Controller_Request_Abstract::setDispatched(false) を使用します) することで、現在のアクションをスキップさせたり置き換えたりすることができます。
- postDispatch() は、アクションが ディスパッチャ でディスパッチされた後にコールされます。 このコールバックは、プロキシやフィルタ的な動作をさせることができます。 リクエストの内容を変更してディスパッチフラグをリセット (Zend_Controller_Request_Abstract::setDispatched(false) を使用します) することで、新しいディスパッチ先アクションを指定することができます。
- dispatchLoopShutdown() は、Zend_Controller_Front がディスパッチループを抜けた後にコールされます。
SessionやACLでよく使用されると思われるpreDispatchだとこんな感じでしょうか。
PHP:
-
<?php
-
require_once 'Zend/Controller/Plugin/Abstract.php';
-
class hogePlugin extends Zend_Controller_Plugin_Abstract
-
{
-
public function preDispatch(Zend_Controller_Request_Abstract $request)
-
{
-
// ここでPluginの処理を行う。
-
}
-
}
-
?>
組み込むには(起動ファイルなどで)フロントコントローラにセットします。
PHP:
-
$front = Zend_Controller_Front::getInstance();
-
require_once('/YOUR_PLUGIN_PATH/hogePlugin.php');
-
$front->registerPlugin(new hogePlugin());
なかなか分かりやすい作りだと思います。