ここでは、Zend Framewrok におけるアクションヘルパーの導入するためのサンプルコードを掲載しています。なお、アクションヘルパー自体については、下記を参照ください。
アクションヘルパーを使用すると、Zend_Controller_Action を継承した任意のアクションコントローラに対して 実行時やその他必要に応じて機能を追加できます。 アクションヘルパーの狙いは、 アクションコントローラに共通機能を追加するために いちいち抽象クラスを継承する手間を省くことにあります。
スポンサーリンク
アクションヘルパークラスの作成
アクションヘルパーは、Zend_Controller_Action_Helper_Abstract クラスを継承して作成します。なお、以下のアクションヘルパーを application/controllers/helper に配置するものとしています。
// path : application/controllers/helper/Sample.php class Action_Helper_Sample extends Zend_Controller_Action_Helper_Abstract { /* オーバーライド */ public function init() { $this->getResponse()->appendBody("SampleHelper.init()\n"); } /* オーバーライド */ public function preDispatch() { $this->getResponse()->appendBody("SampleHelper.preDispatch()\n"); } /* オーバーライド */ public function postDispatch() { $this->getResponse()->appendBody("SampleHelper.postDispatch()\n"); } /* Sample ヘルパー独自メソッド */ public function func() { $this->getResponse()->appendBody("SampleHelper.func()\n"); } }
アクションヘルパーの登録
アクションヘルパーを作成しただけでは、フレームワークから呼び出されません。呼び出されるようにするために、ヘルパーをヘルパーブローカ(Zend_Controller_Action_HelperBroker)に登録します。アクションヘルパーの登録は任意の箇所で可能ですが、呼び出し順序の確認のために、Bootstrap で追加しています。
// path : application/Bootstrap.php require_once 'controllers/helper/Sample.php'; class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAddActionHelper() { /* アクションヘルパーの追加 */ $helper = new Action_Helper_Sample(); Zend_Controller_Action_HelperBroker::addHelper($helper); } }
アクションヘルパー呼出し順序の確認
次のサンプルコードは、アクションコントローラを以下の通り実装して、アクションコントローラとアクションヘルパーの呼び出し順序を確認すています。
class IndexController extends Zend_Controller_Action { public function init() { $this->getResponse()->appendBody("IndexController::init\n"); } public function preDispatch() { $this->getResponse()->appendBody("IndexController::preDispatch\n"); } public function postDispatch() { $this->getResponse()->appendBody("IndexController::postDispatch\n"); } public function indexAction() { // Next アクションを次のアクションとして設定する $this->_forward('next'); $this->getResponse()->appendBody("IndexController::indexAction\n"); } public function nextAction() { /* アクションヘルパー独自メソッドの呼び出し */ $this->_helper->sample->func(); $this->getResponse()->appendBody("IndexController::nextAction\n"); } }
実行結果
SampleHelper.init() IndexController::init SampleHelper.preDispatch() IndexController::preDispatch IndexController::indexAction IndexController::postDispatch SampleHelper.postDispatch() SampleHelper.init() IndexController::init SampleHelper.preDispatch() IndexController::preDispatch SampleHelper.func() IndexController::nextAction IndexController::postDispatch SampleHelper.postDispatch()
上記の通り、アクションコントローラを包み込みようにアクションヘルパーが起動されていることがわかります。また、アクションヘルパーの追加・削除は任意の位置で可能であり、リクエスト時にヘルパーブローカ にヘルパーが存在すれば呼び出され、存在しなければ呼び出されません。