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*** メソッドの *** を指定します。