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