Zend_Controller-QuickStart.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 24249 -->
  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 <acronym>MVC</acronym> de Zend
  10. Framework. <acronym>MVC</acronym> é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 language="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 language="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. <note>
  76. <title>Connaître mod_rewrite</title>
  77. <para>
  78. Les règles de réécriture ci-dessus autorisent l'accès à tous fichiers sous la
  79. racine de votre hôte virtuel. Si vous avez des fichiers que vous ne souhaitez
  80. pas exposer, vous pouvez souhaiter restreindre ces règles. Allez sur le site
  81. d'Apache <ulink
  82. url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">pour en
  83. apprendre davantage concernant mod_rewrite</ulink>.
  84. </para>
  85. </note>
  86. <para>
  87. Si vous avez <acronym>IIS</acronym> 7.0, utilisez ceci pour votre configuration de réécriture&#160;:
  88. </para>
  89. <programlisting language="xml"><![CDATA[
  90. <?xml version="1.0" encoding="UTF-8"?>
  91. <configuration>
  92. <system.webServer>
  93. <rewrite>
  94. <rules>
  95. <rule name="Imported Rule 1" stopProcessing="true">
  96. <match url="^.*$" />
  97. <conditions logicalGrouping="MatchAny">
  98. <add input="{REQUEST_FILENAME}"
  99. matchType="IsFile" pattern=""
  100. ignoreCase="false" />
  101. <add input="{REQUEST_FILENAME}"
  102. matchType="IsDirectory"
  103. pattern="" ignoreCase="false" />
  104. </conditions>
  105. <action type="None" />
  106. </rule>
  107. <rule name="Imported Rule 2" stopProcessing="true">
  108. <match url="^.*$" />
  109. <action type="Rewrite" url="index.php" />
  110. </rule>
  111. </rules>
  112. </rewrite>
  113. </system.webServer>
  114. </configuration>
  115. ]]></programlisting>
  116. <para>
  117. Les règles ci-dessus vont redirigées toute requête vers des ressources
  118. existantes (liens symboliques, fichiers non vides, ou répertoires non-vides), tout
  119. autre requête sera renvoyée vers le contrôleur frontal.
  120. </para>
  121. <note>
  122. <para>
  123. Les règles de réécriture ci-dessus sont pour Apache ; pour des exemples
  124. de règles de réécriture pour d'autres serveurs Web, reportez-vous à la
  125. <link linkend="zend.controller.router.introduction">documentation du
  126. routeur</link>.
  127. </para>
  128. </note>
  129. </sect3>
  130. <sect3 id="zend.controller.quickstart.go.bootstrap">
  131. <title>Créer votre fichier d'amorçage (bootstrap)</title>
  132. <para>
  133. Le fichier d'amorçage est la page vers laquelle toutes les demandes sont
  134. dirigées -- <code>html/index.php</code> dans ce cas-ci. Ouvrez
  135. <code>html/index.php</code> dans l'éditeur de votre choix et ajouter ce qui
  136. suit&#160;:
  137. </para>
  138. <programlisting language="php"><![CDATA[
  139. Zend_Controller_Front::run('/chemin/vers/application/controllers');
  140. ]]></programlisting>
  141. <para>
  142. Ceci va instancier et distribuer le contrôleur frontal, qui conduira les
  143. demandes vers les contrôleurs d'action.
  144. </para>
  145. </sect3>
  146. <sect3 id="zend.controller.quickstart.go.controller">
  147. <title>Créer votre contrôleur d'action par défaut</title>
  148. <para>
  149. Avant de discuter des contrôleurs d'action, vous devez d'abord comprendre
  150. comment les requêtes sont dirigées dans Zend Framework. Par défaut, le premier
  151. segment d'un chemin d'URL correspond à un contrôleur, et le second à une action.
  152. Par exemple, l'URL est <code>http://framework.zend.com/roadmap/components</code>,
  153. le chemin est <code>/roadmap/components</code>, qui correspondra au contrôleur
  154. <code>roadmap</code> et à l'action <code>components</code>. Si aucune action n'est
  155. fournie, l'action <code>index</code> est présumé, et si aucun contrôleur n'est
  156. fourni, le contrôleur <code>index</code> est présumé (suivant la convention Apache
  157. qui fait correspondre un <code>DirectoryIndex</code> automatiquement).
  158. </para>
  159. <para>
  160. Le distributeur du <classname>Zend_Controller</classname> prend alors la
  161. valeur du contrôleur et le fait correspondre à une classe. Par défaut, il s'agit du
  162. nom du contrôleur suivi du mot <code>Controller</code>. Ainsi, dans notre exemple
  163. ci-dessus, le contrôleur <code>roadmap</code> correspond à la classe
  164. <code>RoadmapController</code>.
  165. </para>
  166. <para>
  167. De la même manière, la valeur de l'action correspond à une méthode de la
  168. classe contrôleur. Par défaut, la valeur est écrit en minuscule, et le mot
  169. <code>Action</code> est ajouté. Ainsi, dans notre exemple ci-dessus, l'action
  170. <code>components</code> devient <code>componentsAction</code>, et la méthode finale
  171. appelée est <methodname>RoadmapController::componentsAction()</methodname>.
  172. </para>
  173. <para>
  174. Créons maintenant un contrôleur d'action par défaut et une méthode d'action.
  175. Comme noté auparavant, le contrôleur et l'action par défaut sont tous les deux
  176. nommées <code>index</code>. Ouvrez le fichier
  177. <code>application/controllers/IndexController.php</code>, et entrez ce qui suit
  178. :
  179. </para>
  180. <programlisting language="php"><![CDATA[
  181. /** Zend_Controller_Action */
  182. class IndexController extends Zend_Controller_Action
  183. {
  184. public function indexAction()
  185. {
  186. $this->render();
  187. }
  188. }
  189. ]]></programlisting>
  190. <para>
  191. Par défaut, l'aide d'action
  192. <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>est
  193. activé. Ceci signifie qu'en définissant simplement une méthode d'action et un
  194. script de vue correspondant, vous obtiendrez automatiquement le rendu du contenu.
  195. Par défaut, <classname>Zend_View</classname> est utilisé en tant que couche Vue
  196. dans le <acronym>MVC</acronym>. Le <code>ViewRenderer</code> utilise le nom du contrôleur (par
  197. exemple, <code>index</code>) et le nom de l'action courante (par exemple,
  198. <code>index</code>) pour déterminer le modèle à afficher. Par défaut, le fichier
  199. modèle se termine par l'extension <code>.phtml</code>, cela signifie que dans
  200. l'exemple ci-dessus, le modèle <code>index/index.phtml</code> sera rendu. De plus,
  201. le <code>ViewRenderer</code> suppose automatiquement que le dossier
  202. <code>views</code> situé au même niveau que le dossier des contrôleurs est le
  203. dossier de base des vues, et que les scripts de vues sont dans le sous-dossier
  204. <code>views/scripts/</code>. Ainsi le modèle rendu sera trouvé dans
  205. <code>application/views/scripts/index/index.phtml</code>.
  206. </para>
  207. </sect3>
  208. <sect3 id="zend.controller.quickstart.go.view">
  209. <title>Créer votre script de vue</title>
  210. <para>
  211. Comme mentionné
  212. <link linkend="zend.controller.quickstart.go.controller">dans la section
  213. précédente</link>, les scripts de vue sont dans
  214. <code>application/views/scripts/</code> ; le script de vue pour le contrôleur et
  215. l'action par défaut est donc
  216. <code>application/views/scripts/index/index.phtml</code>. Créer ce fichier, et
  217. saisissez ce HTML :
  218. </para>
  219. <programlisting language="php"><![CDATA[
  220. <!DOCTYPE html
  221. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  222. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  223. <html>
  224. <head>
  225. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  226. <title>My first Zend Framework App</title>
  227. </head>
  228. <body>
  229. <h1>Hello, World!</h1>
  230. </body>
  231. </html>
  232. ]]></programlisting>
  233. </sect3>
  234. <sect3 id="zend.controller.quickstart.go.errorhandler">
  235. <title>Créer votre contrôleur d'erreur</title>
  236. <para>
  237. Par défaut,
  238. <link linkend="zend.controller.plugins.standard.errorhandler">le plugin de gestion
  239. des erreurs</link>est enregistré. Ce plugin nécessite qu'un contrôleur existe pour
  240. gérer les erreurs. Par défaut, il s'agit d'un <code>ErrorController</code> dans le
  241. module par défaut avec une méthode <code>errorAction</code> :
  242. </para>
  243. <programlisting language="php"><![CDATA[
  244. /** Zend_Controller_Action */
  245. class ErrorController extends Zend_Controller_Action
  246. {
  247. public function errorAction()
  248. {
  249. }
  250. }
  251. ]]></programlisting>
  252. <para>
  253. En considérant l'architecture des dossiers vu ci-dessus, le fichier sera dans
  254. <code>application/controllers/ErrorController.php</code>. Vous devez aussi créer
  255. une script de vue dans <code>application/views/scripts/error/error.phtml</code> ;
  256. exemple de contenu possible :
  257. </para>
  258. <programlisting language="php"><![CDATA[
  259. <!DOCTYPE html
  260. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  261. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  262. <html>
  263. <head>
  264. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  265. <title>Erreur</title>
  266. </head>
  267. <body>
  268. <h1>Erreur apparue</h1>
  269. <p>Une erreur est apparue ; veuillez rééssayer plus tard.</p>
  270. </body>
  271. </html>
  272. ]]></programlisting>
  273. </sect3>
  274. <sect3 id="zend.controller.quickstart.go.finish">
  275. <title>Voir le site !</title>
  276. <para>
  277. Avec votre premier contrôleur et votre première vue, vous pouvez maintenant
  278. démarrer votre navigateur et aller sur votre site. En supposant que
  279. <code>exemple.fr</code> est votre domaine, chacun des <acronym>URL</acronym>s suivants vous dirigera
  280. vers la page que nous avons tout juste créée :
  281. </para>
  282. <itemizedlist>
  283. <listitem>
  284. <para><code>http://exemple.fr/</code></para>
  285. </listitem>
  286. <listitem>
  287. <para><code>http://exemple.fr/index</code></para>
  288. </listitem>
  289. <listitem>
  290. <para><code>http://exemple.fr/index/index</code></para>
  291. </listitem>
  292. </itemizedlist>
  293. <para>
  294. Vous êtes maintenant prêt à créer de nouveaux contrôleurs et de nouvelles
  295. méthodes d'action. Félicitations !
  296. </para>
  297. </sect3>
  298. </sect2>
  299. </sect1>