| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <!-- EN-Revision: 24249 -->
- <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]
- 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]
- ]]></programlisting>
- <!-- TODO : to be translated -->
- <note>
- <title>Autoloader namespaces</title>
- <para>
- Because these examples use custom code, we need to register the namespace prefixes for
- that code with our configuration; this is done with the
- <property>autoloaderNamespaces</property> configuration key, which is an array.
- </para>
- <para>
- 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 <property>pluginpaths</property>
- configuration key, which is an associative array, with keys denoting the prefix to use,
- and values denoting the path related to that prefix.
- </para>
- </note>
- <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()
- {
- // フロントコントローラ・インスタンスが存在することを確認して、取り込みます。
- $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_Resource_ResourceAbstract</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>
|