| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.controller.basics">
- <title>Fondations de Zend_Controller</title>
- <para>
- Le système <classname>Zend_Controller</classname> est conçu pour être léger,
- modulaire, et extensible. Il est de conception minimaliste pour permettre la flexibilité et
- la liberté aux utilisateurs tout en fournissant assez de structure de sorte que les
- systèmes établis autour de <classname>Zend_Controller</classname> partagent certaines
- conventions communes et dispositions semblables de code.
- </para>
- <para>
- Le diagramme suivant décrit le déroulement des opérations, et ce qui suit décrit en
- détail les interactions :
- </para>
- <para>
- <inlinegraphic align="center" fileref="figures/zend.controller.basics.png"
- format="PNG" scale="100" valign="middle" width="483" />
- </para>
- <para>
- Le déroulement des opérations de <classname>Zend_Controller</classname> est
- implémenté par plusieurs composants. Même s'il n'est pas nécessaire de comprendre
- complètement les détails de tous ces composants pour employer le système, avoir une bonne
- connaissance du fonctionnement du processus est utile.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <classname>Zend_Controller_Front</classname> orchestre le déroulement entier
- des opérations du système <classname>Zend_Controller</classname>. C'est une
- interprétation du modèle contrôleur frontal ("FrontController").
- <classname>Zend_Controller_Front</classname> traite toutes les demandes reçues par
- le serveur et est finalement responsable de déléguer les demandes aux contrôleurs
- d'action ("ActionControllers" [<classname>Zend_Controller_Action</classname>]).
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Request_Abstract</classname> (souvent référencé
- comme <code>Request Object</code>) représente l'environnement de la requête et
- fournit les méthodes pour régler et rechercher le contrôleur, l'action et les
- paramètres fournis. De plus il contient l'information si l'action qu'elle contient
- a été distribuée ou non par <classname>Zend_Controller_Dispatcher</classname>. Des
- extensions de l'objet abstrait de requête peuvent être employées pour encapsuler
- l'environnement entier de requête, permettant à des routeurs de récupérer les
- informations issues de l'environnement de requête afin de régler les noms de
- contrôleur et d'action.
- </para>
- <para>
- Par défaut, <classname>Zend_Controller_Request_Http</classname> est employé,
- ce qui permet d'accéder à l'environnement complet de requête <acronym>HTTP</acronym>.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Router_Interface</classname> est employé pour
- définir les routeurs. Le routage est le processus d'examen de l'environnement de
- requête pour déterminer quel contrôleur, et action de ce contrôleur, devraient
- recevoir la requête. Ces contrôleur, action, et paramètres facultatifs sont alors
- placés dans l'objet de requête à traiter par
- <classname>Zend_Controller_Dispatcher_Standard</classname>. Le routage se produit
- seulement une fois : quand la demande est initialement reçue et avant que le
- premier contrôleur ne soit distribué.
- </para>
- <para>
- Le routeur par défaut, <classname>Zend_Controller_Router_Rewrite</classname>,
- récupère un <acronym>URI</acronym> comme indiqué dans
- <classname>Zend_Controller_Request_Http</classname> et le décompose en contrôleur,
- action, et paramètres basés sur l'information de chemin de l'URL. Par exemple,
- l'URL <code>http://localhost/foo/bar/key/value</code> serait décodée pour employer
- le contrôleur <code>foo</code>, l'action <code>bar</code>, et pour indiquer un
- paramètre <code>key</code> avec une valeur <code>value</code>.
- </para>
- <para>
- <classname>Zend_Controller_Router_Rewrite</classname> peut également être
- utilisé pour faire correspondre des chemins arbitraires ; voir
- <link linkend="zend.controller.router">la documentation du routeur</link>pour plus
- d'information.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Dispatcher_Interface</classname> est utilisé pour
- définir les distributeurs. La distribution est le processus chargé de récupérer le
- contrôleur et l'action issus de l'objet de requête et de les faire correspondre à
- un fichier/classe de contrôleur et à une méthode d'action dans la classe du
- contrôleur. Si le contrôleur ou l'action n'existent pas, il se charge de déterminer
- des contrôleurs et des actions par défaut à distribuer.
- </para>
- <para>
- Le processus de distribution réel se compose de l'instanciation de la classe
- de contrôleur et de l'appel de la méthode d'action dans cette classe. A la
- différence du routage, qui se produit seulement une fois, la distribution se
- produit dans une boucle. Si le statut distribué de l'objet de requête est remis à
- zéro à un moment quelconque, la boucle sera répétée, en appelant l'action
- actuellement placée dans l'objet de requête. La première fois que la boucle se
- termine avec une propriété de statut d'objet de requête distribué à vrai (booléen
- <constant>TRUE</constant>), le processus s'arrête.
- </para>
- <para>
- Le distributeur par défaut est
- <classname>Zend_Controller_Dispatcher_Standard</classname>. Il définit les
- contrôleurs comme des classes pouvant se nommer avec une série de caractère
- majuscules et/ou minuscules et se terminant par le mot <code>Controller</code>, et
- des méthodes d'action suivant la notationCamel se terminant avec le mot Action :
- <methodname>FooController::barAction()</methodname>. Dans ce cas-ci, le contrôleur est désigné
- comme <code>foo</code> et l'action comme <code>bar</code>.
- </para>
- <note>
- <title>Conventions de nommage (casse)</title>
- <para>
- Puisque les humains sont notoirement incompatibles avec le respect des
- majuscules et des minuscules quand ils tapent des liens, Zend Framework
- normalise les chemins en lettres minuscules. Ceci, naturellement, affectera
- votre manière d'appeler vos contrôleurs et actions... ou vous vous référez à
- eux dans les liens.
- </para>
- <para>
- Si vous souhaitez que votre classe ou action de contrôleur ait de
- multiples motsEnCassesMélangées ou motsEnNotationCamel, vous devrez séparer ces
- mots dans l'URL avec soit un tiret ("-"), soit un point (".") (bien que vous
- puissiez configurer le caractère utilisé).
- </para>
- <para>
- Par exemple, si vous souhaitez l'action
- <methodname>FooBarController::bazBatAction()</methodname>, vous vous referez à elle avec
- l'URL <code>/foo-bar/baz-bat</code> ou <code>/foo.bar/baz.bat</code>.
- </para>
- </note>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Action</classname> est le composant contrôleur
- d'action de base. Chaque contrôleur est une classe simple qui étend la classe de
- <classname>Zend_Controller_Action</classname> et devrait contenir une ou plusieurs
- méthodes d'action.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Response_Abstract</classname> définit une classe
- de réponse de base employée pour rassembler et retourner les réponses des
- contrôleurs d'action. Il rassemble les en-têtes et le contenu du corps.
- </para>
- <para>
- La classe de réponse par défaut est
- <classname>Zend_Controller_Response_Http</classname>, qui convient pour l'usage
- dans un environnement <acronym>HTTP</acronym>.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Le déroulement des opérations de <classname>Zend_Controller</classname> est
- relativement simple. Une demande est reçue par
- <classname>Zend_Controller_Front</classname>, qui appelle alternativement
- <classname>Zend_Controller_Router_Rewrite</classname> pour déterminer le contrôleur (et
- l'action dans ce contrôleur) à distribuer.
- <classname>Zend_Controller_Router_Rewrite</classname> décompose l'URI afin de régler les
- noms de contrôleur et d'action dans la requête.
- <classname>Zend_Controller_Front</classname> entre alors dans une boucle de distribution.
- Il appelle <classname>Zend_Controller_Dispatcher_Standard</classname>, en lui passant la
- requête, pour distribuer le contrôleur et l'action indiqués dans la requête (ou utiliser
- les valeurs par défaut). Après que le contrôleur ait fini, la commande revient à
- <classname>Zend_Controller_Front</classname>. Si le contrôleur a indiqué qu'un autre
- contrôleur devait être distribué en remettant à zéro le statut distribué de la requête, la
- boucle continue et une autre distribution est effectuée. Sinon, le processus se
- termine.
- </para>
- </sect1>
|