ここでは、Zend Framework で URL にマッピングされたコントローラクラスのアクションメソッドの他にデフォルトで呼び出されるアクション以外のメソッドの呼び出し順序について掲載しています。
なお、コントローラクラスやアクションメソッドの作成方法については、下記のリンクから確認できます。
[ ZendFramework1] コントローラとアクションの追加(zf create controller/action)
スポンサーリンク
init preDispatch postDispatch メソッド
アクションメソッド以外にデフォルトで呼び出されるメソッドと呼び出し順序は、次の通りとなります。
| メソッド名 | 呼び出し順序 |
|---|---|
| init メソッド | 1 |
| preDispatch メソッド | 2 |
| アクションメソッド本体 | 3 |
| postDispatch メソッド | 4 |
注意
init, preDispatch および postDispatch メソッドはコントローラ内のすべてのアクションの前に呼び出されるため、アクション固有の処理は極力避けたほうがよいでしょう。
なお、動作確認を行ったサンプルコードは次の通りです。
class SampleController extends Zend_Controller_Action
{
// オーバーライド
public function init()
{
/* Initialize action controller here */
echo 'init';
}
// オーバーライド
public function preDispatch()
{
echo 'preDispatch';
}
// オーバーライド
public function postDispatch()
{
echo 'postDispatch';
}
// Test アクション本体
public function testAction()
{
// action body
echo 'testAction';
}
}
自動レンダリングの無効化
また、echo 出力で出力結果を確認する場合には、確認を容易とするために自動レンダリング(*.phtml への出力)を無効化したほうが何かと都合が良いです。アクションコントローラの init メソッドで自動レンダリングを無効にするサンプルは次の通りです。
/**
* アクションコントローラの初期化処理
*/
public function init()
{
/* Initialize action controller here */
// 方法その1
$front = Zend_Controller_Front::getInstance();
$front->setParam('noViewRenderer', true);
// 方法その2
//$this->_helper->removeHelper('viewRenderer');
// 方法その3
//if (Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer')) {
// Zend_Controller_Action_HelperBroker::removeHelper('viewRenderer');
//}
}