Programmer's Reference Guide

Theory of Operation

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

  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3. }

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

  1. ; APPLICATION_PATH/configs/application.ini
  2. [production]
  3. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  4. bootstrap.class = "Bootstrap"
  5. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  6.  
  7. [testing : production]
  8. [development : production]

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

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

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

  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3.     protected function _initRequest(array $options = array())
  4.     {
  5.         // フロントコントローラ・インスタンスが存在することを確認して、取り込みます。
  6.         $this->bootstrap('FrontController');
  7.         $front = $this->getResource('FrontController');
  8.  
  9.         // リクエストオブジェクトの初期化
  10.         $request = new Zend_Controller_Request_Http();
  11.         $request->setBaseUrl('/foo');
  12.  
  13.         // フロントコントローラに追加
  14.         $front->setRequest($request);
  15.  
  16.         // この値をブートストラップでコンテナの 'request' キーに保存します。
  17.         return $request;
  18.     }
  19. }

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

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

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

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

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

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

  1. class My_Bootstrap_Resource_View
  2.     extends Zend_Application_Resource_ResourceAbstract
  3. {
  4.     public function init()
  5.     {
  6.         $view = new Zend_View($this->getOptions());
  7.         Zend_Dojo::enableView($view);
  8.  
  9.         $view->doctype('XHTML1_STRICT');
  10.         $view->headTitle()->setSeparator(' - ')->append('My Site');
  11.         $view->headMeta()->appendHttpEquiv('Content-Type',
  12.                                            'text/html; charset=utf-8');
  13.  
  14.         $view->dojo()->setDjConfigOption('parseOnLoad', true)
  15.                      ->setLocalPath('/js/dojo/dojo.js')
  16.                      ->registerModulePath('../spindle', 'spindle')
  17.                      ->addStylesheetModule('spindle.themes.spindle')
  18.                      ->requireModule('spindle.main')
  19.                      ->disable();
  20.  
  21.         $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
  22.             'ViewRenderer'
  23.         );
  24.         $viewRenderer->setView($view);
  25.  
  26.         return $view;
  27.     }
  28. }

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

  1. $application = new Zend_Application(
  2.     APPLICATION_ENV,
  3.     array(
  4.         'resources' => array(
  5.             'My_Bootstrap_Resource_View' => array(), // 完全クラス名;
  6.             'view' => array(),                       // または短い名前
  7.  
  8.             'FrontController' => array(
  9.                 'controllerDirectory' => APPLICATION_PATH . '/controllers',
  10.             ),
  11.         ),
  12.  
  13.         // 短い名前のためにプラグインパスを定義します:
  14.         'pluginPaths = array(
  15.             'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
  16.         )
  17.     )
  18. );

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

  1. class My_Bootstrap_Resource_Layout
  2.     extends Zend_Application_Resource_ResourceAbstract
  3. {
  4.     public function init()
  5.     {
  6.         // ビューが初期化されたか確認
  7.         $this->getBootstrap()->bootstrap('view');
  8.  
  9.         // ビューオブジェクトを取得:
  10.         $view = $this->getBootstrap()->getResource('view');
  11.  
  12.         // ...
  13.     }
  14. }

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

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

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

  1. $application = new Zend_Application(...);
  2. $application->getBootstrap()->bootstrap('db');
  3.  
  4. $service = new Zend_XmlRpc_Server();
  5. $service->setClass('Foo')// データベースの利用
  6. echo $service->handle();

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

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

Theory of Operation
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual