Zend_Application-Examples.xml 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 17734 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.application.examples">
  5. <title>Exemples</title>
  6. <para>
  7. La classe de bootstrap elle-même sera typiquement minimaliste ; souvent, elle s'agira
  8. simplement d'une extension vide de la classe de bootstrap de base&#160;:
  9. </para>
  10. <programlisting language="php"><![CDATA[
  11. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  12. {
  13. }
  14. ]]></programlisting>
  15. <para>Avec un fichier de configuration tel que :</para>
  16. <programlisting language="ini"><![CDATA[
  17. ; APPLICATION_PATH/configs/application.ini
  18. [production]
  19. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  20. bootstrap.class = "Bootstrap"
  21. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  22. [testing : production]
  23. [development : production]
  24. ]]></programlisting>
  25. <para>
  26. Cependant, si de l'initialisation personnalisée est nécessaire, alors vous avez 2
  27. choix. D'abord vous pouvez écrire des méthodes préfixées par <emphasis>_init</emphasis> pour
  28. ajouter du code au bootstrap. De telles méthodes seront appelées par
  29. <methodname>bootstrap()</methodname>, et peuvent être appelées comme si elles étaient
  30. publiques, par&#160;: <emphasis>bootstrap&lt;resource&gt;()</emphasis>. Elles peuvent
  31. accepter un tableau d'options.
  32. </para>
  33. <para>
  34. Si votre méthode de ressource retourne une valeur, elle sera stockée dans un conteneur du
  35. bootstrap. Ceci peut être utile quand différentes ressources ont besoin d'interagir (comme
  36. une ressource s'injectant elle-même dans une autre). La méthode
  37. <methodname>getResource()</methodname> peut être utilisée pour récupérer ces valeurs.
  38. </para>
  39. <para>
  40. L'exemple ci-dessous montre une méthode de ressource pour l'initialisation d'un objet
  41. requête. Il utilise le traqueur de dépendances (il dépend de la ressource de contrôleur
  42. frontal), récupère une ressource à partir du bootstrap, et retourne une valeur à stocker
  43. dans le bootstrap.
  44. </para>
  45. <programlisting language="php"><![CDATA[
  46. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  47. {
  48. protected function _initRequest(array $options = array())
  49. {
  50. // Vérifie que le contrôleur frontal est bien présent, et le récupère
  51. $this->bootstrap('FrontController');
  52. $front = $this->getResource('FrontController');
  53. // Initialise l'objet requête
  54. $request = new Zend_Controller_Request_Http();
  55. $request->setBaseUrl('/foo');
  56. // On l'ajoute au contrôleur frontal
  57. $front->setRequest($request);
  58. // Le bootstrap va stocker cette valeur dans la clé 'request'
  59. // de son conteneur
  60. return $request;
  61. }
  62. }
  63. ]]></programlisting>
  64. <para>
  65. Notez l'appel à <methodname>bootstrap()</methodname>&#160;; Ceci permet de s'assurer que le
  66. contrôleur frontal a bien été initialisé avant d'appeler cette méthode.
  67. </para>
  68. <para>
  69. Une autre option consiste à utiliser des ressources de bootstrap. Les plugins de
  70. ressources sont des objets qui s'occupent d'initialisations spéciales, elles peuvent être
  71. spécifiées&#160;:
  72. </para>
  73. <itemizedlist>
  74. <listitem>
  75. <para>
  76. à l'instanciation d'un objet <classname>Zend_Application</classname>&#160;;
  77. </para>
  78. </listitem>
  79. <listitem>
  80. <para>pendant l'initialisation de l'objet bootstrap&#160;;</para>
  81. </listitem>
  82. <listitem>
  83. <para>
  84. en les activant spécifiquement via des appels de méthodes sur l'objet de
  85. bootstrap.
  86. </para>
  87. </listitem>
  88. </itemizedlist>
  89. <para>
  90. Les plugins de ressources implémentent
  91. <classname>Zend_Application_Resource_ResourceAbstract</classname>, qui définit simplement
  92. qu'elles peuvent être injectées dans l'objet les appelant, et qu'elles ont une méthode
  93. <methodname>init()</methodname>. Voici un exemple d'un bootstrap de vue&#160;:
  94. </para>
  95. <programlisting language="php"><![CDATA[
  96. class My_Bootstrap_Resource_View
  97. extends Zend_Application_ResourceAbstract
  98. {
  99. public function init()
  100. {
  101. $view = new Zend_View($this->getOptions());
  102. Zend_Dojo::enableView($view);
  103. $view->doctype('XHTML1_STRICT');
  104. $view->headTitle()->setSeparator(' - ')->append('My Site');
  105. $view->headMeta()->appendHttpEquiv('Content-Type',
  106. 'text/html; charset=utf-8');
  107. $view->dojo()->setDjConfigOption('parseOnLoad', true)
  108. ->setLocalPath('/js/dojo/dojo.js')
  109. ->registerModulePath('../spindle', 'spindle')
  110. ->addStylesheetModule('spindle.themes.spindle')
  111. ->requireModule('spindle.main')
  112. ->disable();
  113. $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
  114. 'ViewRenderer'
  115. );
  116. $viewRenderer->setView($view);
  117. return $view;
  118. }
  119. }
  120. ]]></programlisting>
  121. <para>
  122. Pour dire au bootstrap d'utiliser cette classe, vous devrez fournir le nom de la
  123. classe pour ce plugin de ressource, ou une combinaison préfixe&#160;/&#160;chemin
  124. de chargeur de plugin (plugin loader) et le nom court du plugin de ressource
  125. ("view")&#160;:
  126. </para>
  127. <programlisting language="php"><![CDATA[
  128. $application = new Zend_Application(
  129. APPLICATION_ENV,
  130. array(
  131. 'resources' => array(
  132. 'My_Bootstrap_Resource_View' => array(), // nom de la classe OU
  133. 'view' => array(), // nom court
  134. 'FrontController' => array(
  135. 'controllerDirectory' => APPLICATION_PATH . '/controllers',
  136. ),
  137. ),
  138. // Pour les noms courts, définissez les chemins :
  139. 'resourcePaths = array(
  140. 'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
  141. )
  142. )
  143. );
  144. ]]></programlisting>
  145. <para>
  146. Les plugins de ressource peuvent en appeler d'autres via le bootstrap parent&#160;:
  147. </para>
  148. <programlisting language="php"><![CDATA[
  149. class My_Bootstrap_Resource_Layout
  150. extends Zend_Application_ResourceAbstract
  151. {
  152. public function init()
  153. {
  154. // Assurons nous que la vue est initialisée...
  155. $this->getBootstrap()->bootstrap('view');
  156. // Récupère l'objet de vue :
  157. $view = $this->getBootstrap()->getResource('view');
  158. // ...
  159. }
  160. }
  161. ]]></programlisting>
  162. <para>
  163. En usage normal, vous instancierez votre application, lancerez le bootstrap, puis
  164. l'application&#160;:
  165. </para>
  166. <programlisting language="php"><![CDATA[
  167. $application = new Zend_Application(...);
  168. $application->bootstrap()
  169. ->run();
  170. ]]></programlisting>
  171. <para>
  172. Pour un script personnalisé, vous auriez peut être besoin de ne lancer que des
  173. ressources spécifiques&#160;:
  174. </para>
  175. <programlisting language="php"><![CDATA[
  176. $application = new Zend_Application(...);
  177. $application->getBootstrap()->bootstrap('db');
  178. $service = new Zend_XmlRpc_Server();
  179. $service->setClass('Foo'); // uses database...
  180. echo $service->handle();
  181. ]]></programlisting>
  182. <para>
  183. Plutôt que d'utiliser la méthode <methodname>bootstrap()</methodname> pour appeler les
  184. méthodes internes, vous pouvez surcharger&#160;:
  185. </para>
  186. <programlisting language="php"><![CDATA[
  187. $application = new Zend_Application(...);
  188. $application->getBootstrap()->bootstrapDb();
  189. ]]></programlisting>
  190. </sect1>