Zend_Controller-QuickStart.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 15103 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.controller.quickstart">
  5. <title>Zend_Controller - Démarrage rapide</title>
  6. <sect2 id="zend.controller.quickstart.introduction">
  7. <title>Introduction</title>
  8. <para>
  9. <classname>Zend_Controller</classname> est le coeur du système MVC de Zend
  10. Framework. MVC équivaut à
  11. <ulink url="http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur">
  12. Modèle-Vue-Contrôleur</ulink>et est un motif de conception ("design pattern") visant à
  13. séparer la logique d'application de la logique d'affichage.
  14. <classname>Zend_Controller_Front</classname> implémente un modèle de
  15. <ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">contrôleur
  16. frontal ("Front Controller")</ulink>, dans lequel toutes les demandes sont arrêtées par
  17. le contrôleur frontal et distribuées vers différents contrôleurs d'action ("Action
  18. Controller") basés sur l'URL demandé.
  19. </para>
  20. <para>
  21. Le système <classname>Zend_Controller</classname> a été construit dans un souci
  22. d'extensibilité, soit par sous-classement des classes existantes, en écrivant les
  23. nouvelles classes qui implémentent les diverses interfaces et les classes abstraites
  24. qui forment la base de la famille de contrôleur des classes, soit par écriture de
  25. plugins ou d'aides d'action afin d'utiliser ou d'augmenter les fonctionnalités du
  26. système.
  27. </para>
  28. </sect2>
  29. <sect2 id="zend.controller.quickstart.go">
  30. <title>Démarrage rapide</title>
  31. <para>
  32. Si vous avez besoin d'informations plus détaillées, lisez les sections suivantes.
  33. Si vous voulez juste démarrer rapidement, lisez ce qui suit.
  34. </para>
  35. <sect3 id="zend.controller.quickstart.go.directory">
  36. <title>Créer votre disposition de système de fichiers</title>
  37. <para>
  38. La première étape est de créer votre disposition de système de fichiers. La
  39. disposition typique est la suivante&#160;:
  40. </para>
  41. <programlisting role="php"><![CDATA[
  42. application/
  43. controllers/
  44. IndexController.php
  45. models/
  46. views/
  47. scripts/
  48. index/
  49. index.phtml
  50. helpers/
  51. filters/
  52. html/
  53. .htaccess
  54. index.php
  55. ]]></programlisting>
  56. </sect3>
  57. <sect3 id="zend.controller.quickstart.go.docroot">
  58. <title>Régler votre document root</title>
  59. <para>
  60. Dans votre serveur Web, faîtes pointer votre "document root" vers le dossier
  61. <code>html</code> du système de fichiers ci-dessus.
  62. </para>
  63. </sect3>
  64. <sect3 id="zend.controller.quickstart.go.rewrite">
  65. <title>Créer vos règles de réécriture</title>
  66. <para>Éditez le fichier <code>html/.htaccess</code> afin de lire ceci&#160;:</para>
  67. <programlisting role="php"><![CDATA[
  68. RewriteEngine On
  69. RewriteCond %{REQUEST_FILENAME} -s [OR]
  70. RewriteCond %{REQUEST_FILENAME} -l [OR]
  71. RewriteCond %{REQUEST_FILENAME} -d
  72. RewriteRule ^.*$ - [NC,L]
  73. RewriteRule ^.*$ index.php [NC,L]
  74. ]]></programlisting>
  75. <para>
  76. Si vous avez IIS 7.0, utilisez ceci pour votre configuration de réécriture&#160;:
  77. </para>
  78. <programlisting role="xml"><![CDATA[
  79. <?xml version="1.0" encoding="UTF-8"?>
  80. <configuration>
  81. <system.webServer>
  82. <rewrite>
  83. <rules>
  84. <rule name="Imported Rule 1" stopProcessing="true">
  85. <match url="^.*$" />
  86. <conditions logicalGrouping="MatchAny">
  87. <add input="{REQUEST_FILENAME}"
  88. matchType="IsFile" pattern=""
  89. ignoreCase="false" />
  90. <add input="{REQUEST_FILENAME}"
  91. matchType="IsDirectory"
  92. pattern="" ignoreCase="false" />
  93. </conditions>
  94. <action type="None" />
  95. </rule>
  96. <rule name="Imported Rule 2" stopProcessing="true">
  97. <match url="^.*$" />
  98. <action type="Rewrite" url="index.php" />
  99. </rule>
  100. </rules>
  101. </rewrite>
  102. </system.webServer>
  103. </configuration>
  104. ]]></programlisting>
  105. <para>
  106. Les règles ci-dessus vont redirigées toute requête vers des ressources
  107. existantes (liens symboliques, fichiers non vides, ou répertoires non-vides), tout
  108. autre requête sera renvoyée vers le contrôleur frontal.
  109. </para>
  110. <note>
  111. <para>
  112. Les règles de réécriture ci-dessus sont pour Apache ; pour des exemples
  113. de règles de réécriture pour d'autres serveurs Web, reportez-vous à la
  114. <link linkend="zend.controller.router.introduction">documentation du
  115. routeur</link>.
  116. </para>
  117. </note>
  118. </sect3>
  119. <sect3 id="zend.controller.quickstart.go.bootstrap">
  120. <title>Créer votre fichier d'amorçage (bootstrap)</title>
  121. <para>
  122. Le fichier d'amorçage est la page vers laquelle toutes les demandes sont
  123. dirigées -- <code>html/index.php</code> dans ce cas-ci. Ouvrez
  124. <code>html/index.php</code> dans l'éditeur de votre choix et ajouter ce qui
  125. suit&#160;:
  126. </para>
  127. <programlisting role="php"><![CDATA[
  128. Zend_Controller_Front::run('/chemin/vers/application/controllers');
  129. ]]></programlisting>
  130. <para>
  131. Ceci va instancier et distribuer le contrôleur frontal, qui conduira les
  132. demandes vers les contrôleurs d'action.
  133. </para>
  134. </sect3>
  135. <sect3 id="zend.controller.quickstart.go.controller">
  136. <title>Créer votre contrôleur d'action par défaut</title>
  137. <para>
  138. Avant de discuter des contrôleurs d'action, vous devez d'abord comprendre
  139. comment les requêtes sont dirigées dans Zend Framework. Par défaut, le premier
  140. segment d'un chemin d'URL correspond à un contrôleur, et le second à une action.
  141. Par exemple, l'URL est <code>http://framework.zend.com/roadmap/components</code>,
  142. le chemin est <code>/roadmap/components</code>, qui correspondra au contrôleur
  143. <code>roadmap</code> et à l'action <code>components</code>. Si aucune action n'est
  144. fournie, l'action <code>index</code> est présumé, et si aucun contrôleur n'est
  145. fourni, le contrôleur <code>index</code> est présumé (suivant la convention Apache
  146. qui fait correspondre un <code>DirectoryIndex</code> automatiquement).
  147. </para>
  148. <para>
  149. Le distributeur du <classname>Zend_Controller</classname> prend alors la
  150. valeur du contrôleur et le fait correspondre à une classe. Par défaut, il s'agit du
  151. nom du contrôleur suivi du mot <code>Controller</code>. Ainsi, dans notre exemple
  152. ci-dessus, le contrôleur <code>roadmap</code> correspond à la classe
  153. <code>RoadmapController</code>.
  154. </para>
  155. <para>
  156. De la même manière, la valeur de l'action correspond à une méthode de la
  157. classe contrôleur. Par défaut, la valeur est écrit en minuscule, et le mot
  158. <code>Action</code> est ajouté. Ainsi, dans notre exemple ci-dessus, l'action
  159. <code>components</code> devient <code>componentsAction</code>, et la méthode finale
  160. appelée est <code>RoadmapController::componentsAction()</code>.
  161. </para>
  162. <para>
  163. Créons maintenant un contrôleur d'action par défaut et une méthode d'action.
  164. Comme noté auparavant, le contrôleur et l'action par défaut sont tous les deux
  165. nommées <code>index</code>. Ouvrez le fichier
  166. <code>application/controllers/IndexController.php</code>, et entrez ce qui suit
  167. :
  168. </para>
  169. <programlisting role="php"><![CDATA[
  170. /** Zend_Controller_Action */
  171. class IndexController extends Zend_Controller_Action
  172. {
  173. public function indexAction()
  174. {
  175. $this->render();
  176. }
  177. }
  178. ]]></programlisting>
  179. <para>
  180. Par défaut, l'aide d'action
  181. <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>est
  182. activé. Ceci signifie qu'en définissant simplement une méthode d'action et un
  183. script de vue correspondant, vous obtiendrez automatiquement le rendu du contenu.
  184. Par défaut, <classname>Zend_View</classname> est utilisé en tant que couche Vue
  185. dans le MVC. Le <code>ViewRenderer</code> utilise le nom du contrôleur (par
  186. exemple, <code>index</code>) et le nom de l'action courante (par exemple,
  187. <code>index</code>) pour déterminer le modèle à afficher. Par défaut, le fichier
  188. modèle se termine par l'extension <code>.phtml</code>, cela signifie que dans
  189. l'exemple ci-dessus, le modèle <code>index/index.phtml</code> sera rendu. De plus,
  190. le <code>ViewRenderer</code> suppose automatiquement que le dossier
  191. <code>views</code> situé au même niveau que le dossier des contrôleurs est le
  192. dossier de base des vues, et que les scripts de vues sont dans le sous-dossier
  193. <code>views/scripts/</code>. Ainsi le modèle rendu sera trouvé dans
  194. <code>application/views/scripts/index/index.phtml</code>.
  195. </para>
  196. </sect3>
  197. <sect3 id="zend.controller.quickstart.go.view">
  198. <title>Créer votre script de vue</title>
  199. <para>
  200. Comme mentionné
  201. <link linkend="zend.controller.quickstart.go.controller">dans la section
  202. précédente</link>, les scripts de vue sont dans
  203. <code>application/views/scripts/</code> ; le script de vue pour le contrôleur et
  204. l'action par défaut est donc
  205. <code>application/views/scripts/index/index.phtml</code>. Créer ce fichier, et
  206. saisissez ce HTML :
  207. </para>
  208. <programlisting role="php"><![CDATA[
  209. <!DOCTYPE html
  210. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  211. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  212. <html>
  213. <head>
  214. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  215. <title>My first Zend Framework App</title>
  216. </head>
  217. <body>
  218. <h1>Hello, World!</h1>
  219. </body>
  220. </html>
  221. ]]></programlisting>
  222. </sect3>
  223. <sect3 id="zend.controller.quickstart.go.errorhandler">
  224. <title>Créer votre contrôleur d'erreur</title>
  225. <para>
  226. Par défaut,
  227. <link linkend="zend.controller.plugins.standard.errorhandler">le plugin de gestion
  228. des erreurs</link>est enregistré. Ce plugin nécessite qu'un contrôleur existe pour
  229. gérer les erreurs. Par défaut, il s'agit d'un <code>ErrorController</code> dans le
  230. module par défaut avec une méthode <code>errorAction</code> :
  231. </para>
  232. <programlisting role="php"><![CDATA[
  233. /** Zend_Controller_Action */
  234. class ErrorController extends Zend_Controller_Action
  235. {
  236. public function errorAction()
  237. {
  238. }
  239. }
  240. ]]></programlisting>
  241. <para>
  242. En considérant l'architecture des dossiers vu ci-dessus, le fichier sera dans
  243. <code>application/controllers/ErrorController.php</code>. Vous devez aussi créer
  244. une script de vue dans <code>application/views/scripts/error/error.phtml</code> ;
  245. exemple de contenu possible :
  246. </para>
  247. <programlisting role="php"><![CDATA[
  248. <!DOCTYPE html
  249. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  250. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  251. <html>
  252. <head>
  253. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  254. <title>Erreur</title>
  255. </head>
  256. <body>
  257. <h1>Erreur apparue</h1>
  258. <p>Une erreur est apparue ; veuillez rééssayer plus tard.</p>
  259. </body>
  260. </html>
  261. ]]></programlisting>
  262. </sect3>
  263. <sect3 id="zend.controller.quickstart.go.finish">
  264. <title>Voir le site !</title>
  265. <para>
  266. Avec votre premier contrôleur et votre première vue, vous pouvez maintenant
  267. démarrer votre navigateur et aller sur votre site. En supposant que
  268. <code>exemple.fr</code> est votre domaine, chacun des URLs suivants vous dirigera
  269. vers la page que nous avons tout juste créée :
  270. </para>
  271. <itemizedlist>
  272. <listitem>
  273. <para><code>http://exemple.fr/</code></para>
  274. </listitem>
  275. <listitem>
  276. <para><code>http://exemple.fr/index</code></para>
  277. </listitem>
  278. <listitem>
  279. <para><code>http://exemple.fr/index/index</code></para>
  280. </listitem>
  281. </itemizedlist>
  282. <para>
  283. Vous êtes maintenant prêt à créer de nouveaux contrôleurs et de nouvelles
  284. méthodes d'action. Félicitations !
  285. </para>
  286. </sect3>
  287. </sect2>
  288. </sect1>