Zend_Application-Examples.xml 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 17734 -->
  4. <sect1 id="zend.application.examples">
  5. <title>例</title>
  6. <para>
  7. ブートストラップ・クラスそのものは、一般的にかなりごく小さいものです;
  8. しばしば、それは基底ブートストラップ・クラスを拡張している中身がない単純なスタブです:
  9. </para>
  10. <programlisting language="php"><![CDATA[
  11. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  12. {
  13. }
  14. ]]></programlisting>
  15. <para>
  16. 対応する構成ファイルを伴います:
  17. </para>
  18. <programlisting language="ini"><![CDATA[
  19. ; APPLICATION_PATH/configs/application.ini
  20. [production]
  21. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  22. bootstrap.class = "Bootstrap"
  23. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  24. [testing : production]
  25. [development : production]
  26. ]]></programlisting>
  27. <para>
  28. しかし、カスタマイズした初期化が必要ならば、2つの選択肢ががあります。
  29. 最初に、ブートストラップに個別のコードを指定するために
  30. <emphasis>_init</emphasis>で前に置かれるメソッドを書くことができます。
  31. これらのメソッドは<methodname>bootstrap()</methodname>によって呼ばれて、
  32. まるでそれらが public メソッドであるように呼ばれることもできます:
  33. <emphasis>bootstrap&lt;resource&gt;()</emphasis>
  34. それらは、任意のオプション配列を受け取るべきです。
  35. </para>
  36. <para>
  37. リソース・メソッドが値を返すならば、それはブートストラップでコンテナに保存されます。
  38. 異なるリソースが相互に作用する必要があるとき、
  39. (例えば、別のリソースにそれ自体を注入している1つのリソース)
  40. これは役に立つことがあります。
  41. その場合、メソッド<methodname>getResource()</methodname>は、
  42. それらの値を取得するために使うことができます。
  43. </para>
  44. <para>
  45. 下記の例では、リクエスト・オブジェクトを初期化するためのリソース・メソッドを示します。
  46. それは、トラッキング(フロントコントローラ・リソースに依存します)、
  47. ブートストラップからのリソース取得、
  48. ブートストラップに保存する値の返却することの依存性を利用します。
  49. </para>
  50. <programlisting language="php"><![CDATA[
  51. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  52. {
  53. protected function _initRequest(array $options = array())
  54. {
  55. // フロントコントローラ・インスタンスが存在することを確認して、取り込みます。
  56. $this->bootstrap('FrontController');
  57. $front = $this->getResource('FrontController');
  58. // リクエストオブジェクトの初期化
  59. $request = new Zend_Controller_Request_Http();
  60. $request->setBaseUrl('/foo');
  61. // フロントコントローラに追加
  62. $front->setRequest($request);
  63. // この値をブートストラップでコンテナの 'request' キーに保存します。
  64. return $request;
  65. }
  66. }
  67. ]]></programlisting>
  68. <para>
  69. この例で、<methodname>bootstrap()</methodname>を呼び出すことに注意してください;
  70. フロントコントローラがこのメソッドを呼ぶ前に初期化されることを確実にします。
  71. その呼び出しは、クラスのリソースまたは別のメソッドいずれかの引き金となるかもしれません。
  72. </para>
  73. <para>
  74. リソース・プラグインは、特定の初期化を実行するオブジェクトで、
  75. それは指定されるかもしれません:
  76. </para>
  77. <itemizedlist>
  78. <listitem>
  79. <para>
  80. <classname>Zend_Application</classname>オブジェクトが初期化されるとき
  81. </para>
  82. </listitem>
  83. <listitem>
  84. <para>
  85. ブートストラップオブジェクトの初期化中
  86. </para>
  87. </listitem>
  88. <listitem>
  89. <para>
  90. メソッド呼び出しを介してそれらをブートストラップ・オブジェクトで明示的に使用可能にすることによって
  91. </para>
  92. </listitem>
  93. </itemizedlist>
  94. <para>
  95. 呼出し元とオプションを注入でき、
  96. <methodname>init()</methodname>メソッドをもつことを
  97. 簡単に明確にする
  98. <classname>Zend_Application_Resource_ResourceAbstract</classname>を
  99. リソース・プラグインでは実装します。
  100. 例えば、カスタマイズした "View" ブートストラップ・リソースは、
  101. 以下のように見えるかもしれません:
  102. </para>
  103. <programlisting language="php"><![CDATA[
  104. class My_Bootstrap_Resource_View
  105. extends Zend_Application_Resource_ResourceAbstract
  106. {
  107. public function init()
  108. {
  109. $view = new Zend_View($this->getOptions());
  110. Zend_Dojo::enableView($view);
  111. $view->doctype('XHTML1_STRICT');
  112. $view->headTitle()->setSeparator(' - ')->append('My Site');
  113. $view->headMeta()->appendHttpEquiv('Content-Type',
  114. 'text/html; charset=utf-8');
  115. $view->dojo()->setDjConfigOption('parseOnLoad', true)
  116. ->setLocalPath('/js/dojo/dojo.js')
  117. ->registerModulePath('../spindle', 'spindle')
  118. ->addStylesheetModule('spindle.themes.spindle')
  119. ->requireModule('spindle.main')
  120. ->disable();
  121. $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
  122. 'ViewRenderer'
  123. );
  124. $viewRenderer->setView($view);
  125. return $view;
  126. }
  127. }
  128. ]]></programlisting>
  129. <para>
  130. これを使うようにブートストラップに命じるために、
  131. リソースプラグインのクラス名か、
  132. またはプラグイン・ローダ・プレフィックス・パスと
  133. リソースプラグインの短い名前(例えば "view" )の組み合わせを
  134. 提供する必要があるでしょう:
  135. </para>
  136. <programlisting language="php"><![CDATA[
  137. $application = new Zend_Application(
  138. APPLICATION_ENV,
  139. array(
  140. 'resources' => array(
  141. 'My_Bootstrap_Resource_View' => array(), // 完全クラス名;
  142. 'view' => array(), // または短い名前
  143. 'FrontController' => array(
  144. 'controllerDirectory' => APPLICATION_PATH . '/controllers',
  145. ),
  146. ),
  147. // 短い名前のためにプラグインパスを定義します:
  148. 'pluginPaths = array(
  149. 'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
  150. )
  151. )
  152. );
  153. ]]></programlisting>
  154. <para>
  155. リソースは、親ブートストラップにアクセスすることによって、
  156. 他のリソースとイニシャライザを呼び出すことができます:
  157. </para>
  158. <programlisting language="php"><![CDATA[
  159. class My_Bootstrap_Resource_Layout
  160. extends Zend_Application_Resource_ResourceAbstract
  161. {
  162. public function init()
  163. {
  164. // ビューが初期化されたか確認
  165. $this->getBootstrap()->bootstrap('view');
  166. // ビューオブジェクトを取得:
  167. $view = $this->getBootstrap()->getResource('view');
  168. // ...
  169. }
  170. }
  171. ]]></programlisting>
  172. <para>
  173. 通常の使用法では、アプリケーションをインスタンス化して、
  174. 起動して実行するでしょう:
  175. </para>
  176. <programlisting language="php"><![CDATA[
  177. $application = new Zend_Application(...);
  178. $application->bootstrap()
  179. ->run();
  180. ]]></programlisting>
  181. <para>
  182. カスタマイズしたスクリプトについては、
  183. 特定のリソースを単純に初期化する必要があるかもしれません:
  184. </para>
  185. <programlisting language="php"><![CDATA[
  186. $application = new Zend_Application(...);
  187. $application->getBootstrap()->bootstrap('db');
  188. $service = new Zend_XmlRpc_Server();
  189. $service->setClass('Foo'); // データベースの利用
  190. echo $service->handle();
  191. ]]></programlisting>
  192. <para>
  193. 内部のメソッドまたはリソースを呼び出す
  194. <methodname>bootstrap()</methodname>メソッドを使用する代わりに、
  195. オーバーローディングも使うかもしれません:
  196. </para>
  197. <programlisting language="php"><![CDATA[
  198. $application = new Zend_Application(...);
  199. $application->getBootstrap()->bootstrapDb();
  200. ]]></programlisting>
  201. </sect1>