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

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

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

; APPLICATION_PATH/configs/application.ini
[production]
autoloaderNamespaces[] = "My_"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
pluginpaths.My_Bootstrap_Resource = "My/Bootstrap/Resource"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[testing : production]
[development : production]

Autoloader namespaces

Because these examples use custom code, we need to register the namespace prefixes for that code with our configuration; this is done with the autoloaderNamespaces configuration key, which is an array.

Additionally, to ensure that custom plugin resources are discovered, we need to register a plugin prefix path with the bootstrap. This is done with the pluginpaths configuration key, which is an associative array, with keys denoting the prefix to use, and values denoting the path related to that prefix.

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

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

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

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initRequest()
    {
        // フロントコントローラ・インスタンスが存在することを確認して、取り込みます。
        $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();