[ ZendFramework1 ] 初期化処理を追加する ( Bootstrap クラス )

Pocket

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

参考
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>