Zend_Application-Examples.xml 9.6 KB

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