zf コマンドでプロジェクトを作成すると、application ディレクトリ直下に Bootstrap.php(空のクラス) が作成されます。アプリケーション全体の初期化処理などをこの位置で行います。
ここでは、Bootstrap.php に初期化処理を追加する2通りの方法を掲載しています。
スポンサーリンク
Bootstrap.php に _init で始まるメソッドを追加する
Bootstrap クラス内に _init で始まるメソッドを追加するとフレームワークで実行リソースとして解釈され呼び出されます。これを利用し初期化処理を行う。なお、_init で始まるメソッドは複数定義することができます。
protected function _bootstrap($resource = null) をオーバーライド
作成された Bootstrap クラスは、Zend_Application_Bootstrap_Bootstrap クラスを継承しています。親クラスの _bootstrap メソッドをオーバーライドして初期化処理を追加することもできます。
これら2通りの初期化処理のサンプルコードは次の通りです。
// file: application/Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* 初期化方法その1
* _init で始まるメソッドを作成しフレームワークから呼び出してもらう
*/
protected function _initNoViewRenderer()
{
// 自動レンダリングの無効化
$front = Zend_Controller_Front::getInstance();
$front->setParam('noViewRenderer', true);
// せっかくなので設定してあるパラメータをリターンする
return $front->getParams();
}
/**
* 初期化方法その2
* _bootstrap メソッドをオーバーライドする
*/
protected function _bootstrap($resource = null)
{
// デフォルトの初期化処理を行う
parent::_bootstrap($resource);
/*
* この位置に初期化処理を追加する
*/
// 自動レンダリングの無効化
$front = Zend_Controller_Front::getInstance();
$front->setParam('noViewRenderer', true);
}
}
上記をそのまま実行した場合、parent::_bootstrap メソッドでも _initNoViewRenderer が呼び出されるので、2回自動レンダリングの無効化処理が実行されることになります。
詳細は、ライブラリ内の Zend_Application_Bootstrap_Bootstrap や Zend_Application_Bootstrap_BootstrapAbstract クラスを参照ください。
bootstrap の _init*** メソッドのリターン値をアクションコントローラで取得する
上記サンプルのように、bootstrap クラス内に _init で始まるメソッドはフレームワークから実行されます。なお、_init*** メソッドのリターン値はフレームワークに保持され、アクションコントローラのコンストラクタにパラメータとして渡されます。
上記サンプルにある、_initNoViewRenderer メソッドのリターン値をアクションコントローラで取得するサンプルは以下の通りです。
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
// ブートストラップからの起動パラメータを取得する
$bootstrap = $this->getInvokeArg('bootstrap');
// ブートストラップの _init*** メソッドのリターン値を取得する
if ($bootstrap->hasResource('NoViewRenderer')) {
$front = $bootstrap->getResource('NoViewRenderer');
// 結果出力
var_dump($front);
}
}
}
//
// ブラウザに表示される内容
//
//array(1) { ["noViewRenderer"]=> bool(true) }
getInvokeArg メソッドの引数 ‘bootstrap’ は固定文字列であり、Zend ライブラリ内でも使用されています。そして hasResource で有無を確認し、getResource でその値を取得しています。なお、引数 ‘NoViewRenderer’ は bootstrap での _init*** メソッドの *** を指定します。