ここでは、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()
上記の通り、アクションコントローラを包み込みようにアクションヘルパーが起動されていることがわかります。また、アクションヘルパーの追加・削除は任意の位置で可能であり、リクエスト時にヘルパーブローカ にヘルパーが存在すれば呼び出され、存在しなければ呼び出されません。