# 例

ブートストラップ・クラスそのものは、一般的にかなりごく小さいものです; しばしば、それは基底ブートストラップ・クラスを拡張している中身がない単純なスタブです:

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }

対応する構成ファイルを伴います:

    ; APPLICATION_PATH/configs/application.ini
    [production]
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

    [testing : production]
    [development : production]

しかし、カスタマイズした初期化が必要ならば、2つの選択肢ががあります。 最初に、ブートストラップに個別のコードを指定するために _initで前に置かれるメソッドを書くことができます。 これらのメソッドは`bootstrap()`によって呼ばれて、 まるでそれらが public メソッドであるように呼ばれることもできます: bootstrap<resource>() それらは、任意のオプション配列を受け取るべきです。

リソース・メソッドが値を返すならば、それはブートストラップでコンテナに保存されます。 異なるリソースが相互に作用する必要があるとき、 （例えば、別のリソースにそれ自体を注入している1つのリソース） これは役に立つことがあります。 その場合、メソッド`getResource()`は、 それらの値を取得するために使うことができます。

下記の例では、リクエスト・オブジェクトを初期化するためのリソース・メソッドを示します。 それは、トラッキング（フロントコントローラ・リソースに依存します）、 ブートストラップからのリソース取得、 ブートストラップに保存する値の返却することの依存性を利用します。

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initRequest(array $options = array())
        {
            // フロントコントローラ・インスタンスが存在することを確認して、取り込みます。
            $this->bootstrap('FrontController');
            $front = $this->getResource('FrontController');

            // リクエストオブジェクトの初期化
            $request = new Zend_Controller_Request_Http();
            $request->setBaseUrl('/foo');

            // フロントコントローラに追加
            $front->setRequest($request);

            // この値をブートストラップでコンテナの 'request' キーに保存します。
            return $request;
        }
    }

この例で、`bootstrap()`を呼び出すことに注意してください; フロントコントローラがこのメソッドを呼ぶ前に初期化されることを確実にします。 その呼び出しは、クラスのリソースまたは別のメソッドいずれかの引き金となるかもしれません。

リソース・プラグインは、特定の初期化を実行するオブジェクトで、 それは指定されるかもしれません:

- `Zend_Application`オブジェクトが初期化されるとき

- ブートストラップオブジェクトの初期化中

- メソッド呼び出しを介してそれらをブートストラップ・オブジェクトで明示的に使用可能にすることによって

呼出し元とオプションを注入でき、 `init()`メソッドをもつことを 簡単に明確にする `Zend_Application_Resource_ResourceAbstract`を リソース・プラグインでは実装します。 例えば、カスタマイズした "View" ブートストラップ・リソースは、 以下のように見えるかもしれません:

    class My_Bootstrap_Resource_View
        extends Zend_Application_Resource_ResourceAbstract
    {
        public function init()
        {
            $view = new Zend_View($this->getOptions());
            Zend_Dojo::enableView($view);

            $view->doctype('XHTML1_STRICT');
            $view->headTitle()->setSeparator(' - ')->append('My Site');
            $view->headMeta()->appendHttpEquiv('Content-Type',
                                               'text/html; charset=utf-8');

            $view->dojo()->setDjConfigOption('parseOnLoad', true)
                         ->setLocalPath('/js/dojo/dojo.js')
                         ->registerModulePath('../spindle', 'spindle')
                         ->addStylesheetModule('spindle.themes.spindle')
                         ->requireModule('spindle.main')
                         ->disable();

            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
                'ViewRenderer'
            );
            $viewRenderer->setView($view);

            return $view;
        }
    }

これを使うようにブートストラップに命じるために、 リソースプラグインのクラス名か、 またはプラグイン・ローダ・プレフィックス・パスと リソースプラグインの短い名前（例えば "view" ）の組み合わせを 提供する必要があるでしょう:

    $application = new Zend_Application(
        APPLICATION_ENV,
        array(
            'resources' => array(
                'My_Bootstrap_Resource_View' => array(), // 完全クラス名;
                'view' => array(),                       // または短い名前

                'FrontController' => array(
                    'controllerDirectory' => APPLICATION_PATH . '/controllers',
                ),
            ),

            // 短い名前のためにプラグインパスを定義します:
            'pluginPaths = array(
                'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
            )
        )
    );

リソースは、親ブートストラップにアクセスすることによって、 他のリソースとイニシャライザを呼び出すことができます:

    class My_Bootstrap_Resource_Layout
        extends Zend_Application_Resource_ResourceAbstract
    {
        public function init()
        {
            // ビューが初期化されたか確認
            $this->getBootstrap()->bootstrap('view');

            // ビューオブジェクトを取得:
            $view = $this->getBootstrap()->getResource('view');

            // ...
        }
    }

通常の使用法では、アプリケーションをインスタンス化して、 起動して実行するでしょう:

    $application = new Zend_Application(...);
    $application->bootstrap()
                ->run();

カスタマイズしたスクリプトについては、 特定のリソースを単純に初期化する必要があるかもしれません:

    $application = new Zend_Application(...);
    $application->getBootstrap()->bootstrap('db');

    $service = new Zend_XmlRpc_Server();
    $service->setClass('Foo');  // データベースの利用
    echo $service->handle();

内部のメソッドまたはリソースを呼び出す `bootstrap()`メソッドを使用する代わりに、 オーバーローディングも使うかもしれません:

    $application = new Zend_Application(...);
    $application->getBootstrap()->bootstrapDb();