Zend_Controller-Basics.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.controller.basics">
  5. <title>Fondations de Zend_Controller</title>
  6. <para>
  7. Le système <classname>Zend_Controller</classname> est conçu pour être léger,
  8. modulaire, et extensible. Il est de conception minimaliste pour permettre la flexibilité et
  9. la liberté aux utilisateurs tout en fournissant assez de structure de sorte que les
  10. systèmes établis autour de <classname>Zend_Controller</classname> partagent certaines
  11. conventions communes et dispositions semblables de code.
  12. </para>
  13. <para>
  14. Le diagramme suivant décrit le déroulement des opérations, et ce qui suit décrit en
  15. détail les interactions&#160;:
  16. </para>
  17. <para>
  18. <inlinegraphic align="center" fileref="figures/zend.controller.basics.png"
  19. format="PNG" scale="100" valign="middle" width="483" />
  20. </para>
  21. <para>
  22. Le déroulement des opérations de <classname>Zend_Controller</classname> est
  23. implémenté par plusieurs composants. Même s'il n'est pas nécessaire de comprendre
  24. complètement les détails de tous ces composants pour employer le système, avoir une bonne
  25. connaissance du fonctionnement du processus est utile.
  26. </para>
  27. <itemizedlist>
  28. <listitem>
  29. <para>
  30. <classname>Zend_Controller_Front</classname> orchestre le déroulement entier
  31. des opérations du système <classname>Zend_Controller</classname>. C'est une
  32. interprétation du modèle contrôleur frontal ("FrontController").
  33. <classname>Zend_Controller_Front</classname> traite toutes les demandes reçues par
  34. le serveur et est finalement responsable de déléguer les demandes aux contrôleurs
  35. d'action ("ActionControllers" [<classname>Zend_Controller_Action</classname>]).
  36. </para>
  37. </listitem>
  38. <listitem>
  39. <para>
  40. <classname>Zend_Controller_Request_Abstract</classname> (souvent référencé
  41. comme <code>Request Object</code>) représente l'environnement de la requête et
  42. fournit les méthodes pour régler et rechercher le contrôleur, l'action et les
  43. paramètres fournis. De plus il contient l'information si l'action qu'elle contient
  44. a été distribuée ou non par <classname>Zend_Controller_Dispatcher</classname>. Des
  45. extensions de l'objet abstrait de requête peuvent être employées pour encapsuler
  46. l'environnement entier de requête, permettant à des routeurs de récupérer les
  47. informations issues de l'environnement de requête afin de régler les noms de
  48. contrôleur et d'action.
  49. </para>
  50. <para>
  51. Par défaut, <classname>Zend_Controller_Request_Http</classname> est employé,
  52. ce qui permet d'accéder à l'environnement complet de requête <acronym>HTTP</acronym>.
  53. </para>
  54. </listitem>
  55. <listitem>
  56. <para>
  57. <classname>Zend_Controller_Router_Interface</classname> est employé pour
  58. définir les routeurs. Le routage est le processus d'examen de l'environnement de
  59. requête pour déterminer quel contrôleur, et action de ce contrôleur, devraient
  60. recevoir la requête. Ces contrôleur, action, et paramètres facultatifs sont alors
  61. placés dans l'objet de requête à traiter par
  62. <classname>Zend_Controller_Dispatcher_Standard</classname>. Le routage se produit
  63. seulement une fois&#160;: quand la demande est initialement reçue et avant que le
  64. premier contrôleur ne soit distribué.
  65. </para>
  66. <para>
  67. Le routeur par défaut, <classname>Zend_Controller_Router_Rewrite</classname>,
  68. récupère un <acronym>URI</acronym> comme indiqué dans
  69. <classname>Zend_Controller_Request_Http</classname> et le décompose en contrôleur,
  70. action, et paramètres basés sur l'information de chemin de l'URL. Par exemple,
  71. l'URL <code>http://localhost/foo/bar/key/value</code> serait décodée pour employer
  72. le contrôleur <code>foo</code>, l'action <code>bar</code>, et pour indiquer un
  73. paramètre <code>key</code> avec une valeur <code>value</code>.
  74. </para>
  75. <para>
  76. <classname>Zend_Controller_Router_Rewrite</classname> peut également être
  77. utilisé pour faire correspondre des chemins arbitraires&#160;; voir
  78. <link linkend="zend.controller.router">la documentation du routeur</link>pour plus
  79. d'information.
  80. </para>
  81. </listitem>
  82. <listitem>
  83. <para>
  84. <classname>Zend_Controller_Dispatcher_Interface</classname> est utilisé pour
  85. définir les distributeurs. La distribution est le processus chargé de récupérer le
  86. contrôleur et l'action issus de l'objet de requête et de les faire correspondre à
  87. un fichier/classe de contrôleur et à une méthode d'action dans la classe du
  88. contrôleur. Si le contrôleur ou l'action n'existent pas, il se charge de déterminer
  89. des contrôleurs et des actions par défaut à distribuer.
  90. </para>
  91. <para>
  92. Le processus de distribution réel se compose de l'instanciation de la classe
  93. de contrôleur et de l'appel de la méthode d'action dans cette classe. A la
  94. différence du routage, qui se produit seulement une fois, la distribution se
  95. produit dans une boucle. Si le statut distribué de l'objet de requête est remis à
  96. zéro à un moment quelconque, la boucle sera répétée, en appelant l'action
  97. actuellement placée dans l'objet de requête. La première fois que la boucle se
  98. termine avec une propriété de statut d'objet de requête distribué à vrai (booléen
  99. <constant>TRUE</constant>), le processus s'arrête.
  100. </para>
  101. <para>
  102. Le distributeur par défaut est
  103. <classname>Zend_Controller_Dispatcher_Standard</classname>. Il définit les
  104. contrôleurs comme des classes pouvant se nommer avec une série de caractère
  105. majuscules et/ou minuscules et se terminant par le mot <code>Controller</code>, et
  106. des méthodes d'action suivant la notationCamel se terminant avec le mot Action :
  107. <methodname>FooController::barAction()</methodname>. Dans ce cas-ci, le contrôleur est désigné
  108. comme <code>foo</code> et l'action comme <code>bar</code>.
  109. </para>
  110. <note>
  111. <title>Conventions de nommage (casse)</title>
  112. <para>
  113. Puisque les humains sont notoirement incompatibles avec le respect des
  114. majuscules et des minuscules quand ils tapent des liens, Zend Framework
  115. normalise les chemins en lettres minuscules. Ceci, naturellement, affectera
  116. votre manière d'appeler vos contrôleurs et actions... ou vous vous référez à
  117. eux dans les liens.
  118. </para>
  119. <para>
  120. Si vous souhaitez que votre classe ou action de contrôleur ait de
  121. multiples motsEnCassesMélangées ou motsEnNotationCamel, vous devrez séparer ces
  122. mots dans l'URL avec soit un tiret ("-"), soit un point (".") (bien que vous
  123. puissiez configurer le caractère utilisé).
  124. </para>
  125. <para>
  126. Par exemple, si vous souhaitez l'action
  127. <methodname>FooBarController::bazBatAction()</methodname>, vous vous referez à elle avec
  128. l'URL <code>/foo-bar/baz-bat</code> ou <code>/foo.bar/baz.bat</code>.
  129. </para>
  130. </note>
  131. </listitem>
  132. <listitem>
  133. <para>
  134. <classname>Zend_Controller_Action</classname> est le composant contrôleur
  135. d'action de base. Chaque contrôleur est une classe simple qui étend la classe de
  136. <classname>Zend_Controller_Action</classname> et devrait contenir une ou plusieurs
  137. méthodes d'action.
  138. </para>
  139. </listitem>
  140. <listitem>
  141. <para>
  142. <classname>Zend_Controller_Response_Abstract</classname> définit une classe
  143. de réponse de base employée pour rassembler et retourner les réponses des
  144. contrôleurs d'action. Il rassemble les en-têtes et le contenu du corps.
  145. </para>
  146. <para>
  147. La classe de réponse par défaut est
  148. <classname>Zend_Controller_Response_Http</classname>, qui convient pour l'usage
  149. dans un environnement <acronym>HTTP</acronym>.
  150. </para>
  151. </listitem>
  152. </itemizedlist>
  153. <para>
  154. Le déroulement des opérations de <classname>Zend_Controller</classname> est
  155. relativement simple. Une demande est reçue par
  156. <classname>Zend_Controller_Front</classname>, qui appelle alternativement
  157. <classname>Zend_Controller_Router_Rewrite</classname> pour déterminer le contrôleur (et
  158. l'action dans ce contrôleur) à distribuer.
  159. <classname>Zend_Controller_Router_Rewrite</classname> décompose l'URI afin de régler les
  160. noms de contrôleur et d'action dans la requête.
  161. <classname>Zend_Controller_Front</classname> entre alors dans une boucle de distribution.
  162. Il appelle <classname>Zend_Controller_Dispatcher_Standard</classname>, en lui passant la
  163. requête, pour distribuer le contrôleur et l'action indiqués dans la requête (ou utiliser
  164. les valeurs par défaut). Après que le contrôleur ait fini, la commande revient à
  165. <classname>Zend_Controller_Front</classname>. Si le contrôleur a indiqué qu'un autre
  166. contrôleur devait être distribué en remettant à zéro le statut distribué de la requête, la
  167. boucle continue et une autre distribution est effectuée. Sinon, le processus se
  168. termine.
  169. </para>
  170. </sect1>