|
|
@@ -0,0 +1,237 @@
|
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
|
+<!-- Reviewed: no -->
|
|
|
+<!-- EN-Revision: 15823 -->
|
|
|
+<sect1 id="zend.application.examples">
|
|
|
+ <title>例</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ ブートストラップ・クラスそのものは、一般的にかなりごく小さいものです;
|
|
|
+ しばしば、それは基底ブートストラップ・クラスを拡張している中身がない単純なスタブです:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
|
|
|
+{
|
|
|
+}
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ 対応する構成ファイルを伴います:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="ini"><![CDATA[
|
|
|
+; APPLICATION_PATH/configs/application.ini
|
|
|
+[production]
|
|
|
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
|
|
|
+bootstrap.class = "Bootstrap"
|
|
|
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
|
|
|
+
|
|
|
+[development : testing]
|
|
|
+[development : production]
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ しかし、カスタマイズした初期化が必要ならば、2つの選択肢ががあります。
|
|
|
+ 最初に、ブートストラップに個別のコードを指定するために
|
|
|
+ <emphasis>_init</emphasis>で前に置かれるメソッドを書くことができます。
|
|
|
+ これらのメソッドは<methodname>bootstrap()</methodname>によって呼ばれて、
|
|
|
+ まるでそれらが public メソッドであるように呼ばれることもできます:
|
|
|
+ <emphasis>bootstrap<resource>()</emphasis>
|
|
|
+ それらは、任意のオプション配列を受け取るべきです。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ リソース・メソッドが値を返すならば、それはブートストラップでコンテナに保存されます。
|
|
|
+ 異なるリソースが相互に作用する必要があるとき、
|
|
|
+ (例えば、別のリソースにそれ自体を注入している1つのリソース)
|
|
|
+ これは役に立つことがあります。
|
|
|
+ その場合、メソッド<methodname>getResource()</methodname>は、
|
|
|
+ それらの値を取得するために使うことができます。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ 下記の例では、リクエスト・オブジェクトを初期化するためのリソース・メソッドを示します。
|
|
|
+ それは、トラッキング(フロントコントローラ・リソースに依存します)、
|
|
|
+ ブートストラップからのリソース取得、
|
|
|
+ ブートストラップに保存する値の返却することの依存性を利用します。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+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;
|
|
|
+ }
|
|
|
+}
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ この例で、<methodname>bootstrap()</methodname>を呼び出すことに注意してください;
|
|
|
+ フロントコントローラがこのメソッドを呼ぶ前に初期化されることを確実にします。
|
|
|
+ その呼び出しは、クラスのリソースまたは別のメソッドいずれかの引き金となるかもしれません。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ リソース・プラグインは、特定の初期化を実行するオブジェクトで、
|
|
|
+ それは指定されるかもしれません:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <classname>Zend_Application</classname>オブジェクトが初期化されるとき
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ ブートストラップオブジェクトの初期化中
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ メソッド呼び出しを介してそれらをブートストラップ・オブジェクトで明示的に使用可能にすることによって
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ </itemizedlist>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ 呼出し元とオプションを注入でき、
|
|
|
+ <methodname>init()</methodname>メソッドをもつことを
|
|
|
+ 簡単に明確にする
|
|
|
+ <classname>Zend_Application_Bootstrap_Resource</classname>を
|
|
|
+ リソース・プラグインでは実装します。
|
|
|
+ 例えば、カスタマイズした "View" ブートストラップ・リソースは、
|
|
|
+ 以下のように見えるかもしれません:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+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;
|
|
|
+ }
|
|
|
+}
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ これを使うようにブートストラップに命じるために、
|
|
|
+ リソースのクラス名か、
|
|
|
+ またはプラグイン・ローダ・プレフィックス・パスと
|
|
|
+ リソースの短い名前(例えば "view" )の組み合わせを
|
|
|
+ 提供する必要があるでしょう:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$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',
|
|
|
+ )
|
|
|
+ )
|
|
|
+);
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ リソースは、親ブートストラップにアクセスすることによって、
|
|
|
+ 他のリソースとイニシャライザを呼び出すことができます:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+class My_Bootstrap_Resource_Layout
|
|
|
+ extends Zend_Application_Resource_ResourceAbstract
|
|
|
+{
|
|
|
+ public function init()
|
|
|
+ {
|
|
|
+ // ビューが初期化されたか確認
|
|
|
+ $this->getBootstrap()->bootstrap('view');
|
|
|
+
|
|
|
+ // ビューオブジェクトを取得:
|
|
|
+ $view = $this->getBootstrap()->getResource('view');
|
|
|
+
|
|
|
+ // ...
|
|
|
+ }
|
|
|
+}
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ 通常の使用法では、アプリケーションをインスタンス化して、
|
|
|
+ 起動して実行するでしょう:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$application = new Zend_Application(...);
|
|
|
+$application->bootstrap()
|
|
|
+ ->run();
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ カスタマイズしたスクリプトについては、
|
|
|
+ 特定のリソースを単純に初期化する必要があるかもしれません:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$application = new Zend_Application(...);
|
|
|
+$application->getBootstrap()->bootstrap('db');
|
|
|
+
|
|
|
+$service = new Zend_XmlRpc_Server();
|
|
|
+$service->setClass('Foo'); // データベースの利用
|
|
|
+echo $service->handle();
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ 内部のメソッドまたはリソースを呼び出す
|
|
|
+ <methodname>bootstrap()</methodname>メソッドを使用する代わりに、
|
|
|
+ オーバーローディングも使うかもしれません:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$application = new Zend_Application(...);
|
|
|
+$application->getBootstrap()->bootstrapDb();
|
|
|
+]]></programlisting>
|
|
|
+</sect1>
|