Zend_Application-Examples.xml 9.7 KB

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