プラグイン
ここからはプラグインの使用について見ていきます。前回紹介した「Zend_Controller_Plugin_ErrorHandler
」は、標準で含まれるプラグインです。
プラグインの書き方
プラグインは、Zend_Controller_Plugin_Abstract
を継承して作成します。実行されるきっかけとなる発生イベントについては、以下のイベントメソッドがあります。前回アクションコントローラの項で紹介した「preDispatch()
」や「postDispatch()
」もあり、さらにそれ以外にも広く用意されているのが分かります。
イベントメソッド | タイミング |
routeStartup() | ルーティングに入る前 |
routeShutdown() | ルーティングの終了後 |
dispatchLoopStartup() | ディスパッチループに入る前 |
preDispatch() | アクションのディスパッチ前 |
postDispatch() | アクションのディスパッチ後 |
dispatchLoopShutdown() | ディスパッチループの終了後 |
また、プラグインからは「getRequest()
」や「getResponse()
」を用いてリクエストオブジェクト・レスポンスオブジェクトを操作することもできます。
使い方
プラグインを利用するには、フロントコントローラ内で「Zend_Controller_Front::registerPlugin()
」でプラグインクラスを登録します。これで、イベント発生時にプラグイン内の該当する処理がなされることになります。その他、次のようなメソッドが用意されています。
メソッド | 内容 |
getPlugin($class) | 登録されたプラグインを取得 |
getPlugins() | 登録されたプラグインをまとめて取得 |
unregisterPlugin($plugin) | プラグインを登録解除。$pluginにはオブジェクトかクラス(一致するプラグインがすべて該当)を指定 |
サンプル
最後にプラグインを使用したごく簡単なサンプルを示します。
<?php require_once 'Zend/Controller/Front.php'; class CodezinePlugin extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup( Zend_Controller_Request_Abstract $request) { $this->getRequest()->setControllerName('wings'); $this->getRequest()->setActionName('codezine'); } } $front=Zend_Controller_Front::getInstance(); ... $front->setControllerDirectory('../zendapps/controllers'); //$front->registerPlugin(new CodezinePlugin()); $front->dispatch();
registerPlugin()
の行のコメントをはずしてみてください。「dispatchLoopStartup()
」内でリクエストオブジェクトを操作し、どのようなURIが指定されようともWingsコントローラのcodezineアクションにディスパッチされるようにしてしまいます。例えばサイトのメンテナンスなどですべてのアクセスを「只今メンテナンス中です」などのページへ一時的に繋ぎたい場合など、このような方法も使えるかもしれません。
まとめ
Zend_Controller後編となる今回は、コントローラの機能を拡張するアクションヘルパーとプラグインについて紹介しました。次回からはZend Frameworkにおいてデータベースアクセスを担うZend_Dbについて解説します。