Programmer's Reference Guide
| Theory of Operation |
例
ブートストラップ・クラスそのものは、一般的にかなりごく小さいものです; しばしば、それは基底ブートストラップ・クラスを拡張している中身がない単純なスタブです:
- 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
- {
- {
- // フロントコントローラ・インスタンスが存在することを確認して、取り込みます。
- $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,
- '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'); // データベースの利用
内部のメソッドまたはリソースを呼び出す bootstrap()メソッドを使用する代わりに、 オーバーローディングも使うかもしれません:
- $application = new Zend_Application(...);
- $application->getBootstrap()->bootstrapDb();
| Theory of Operation |
