[MANUAL] English:
[zend.git] / documentation / manual / fr / ref / migration-06.xml
blob2ae40f1fcc2efef5c5976f1e8d335733330b456e
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20876 -->
3 <!-- Reviewed: no -->
4 <sect1 id="migration.06">
5     <title>Zend Framework 0.6</title>
7     <para>
8         Lors de la migration d'un version précédente vers Zend Framework 0.6 ou plus récent
9         vous devriez prendre note de ce qui suit.
10     </para>
12     <sect2 id="migration.06.zend.controller">
13         <title>Zend_Controller</title>
15         <para>
16             L'utilisation de base des composants <acronym>MVC</acronym> n'a pas changé ; vous pouvez toujours
17             faire comme suit&#160;:
18         </para>
20         <programlisting language="php"><![CDATA[
21 Zend_Controller_Front::run('/chemin/vers/controleurs');
22 ]]></programlisting>
24         <programlisting language="php"><![CDATA[
25 /* -- créer un routeur -- */
26 $router = new Zend_Controller_RewriteRouter();
27 $router->addRoute('user', 'user/:username', array('controller' => 'user',
28 'action' => 'info'));
30 /* -- l'affecter à un contrôleur -- */
31 $ctrl = Zend_Controller_Front::getInstance();
32 $ctrl->setRouter($router);
34 /* -- régler le répertoire des contrôleurs et distribuer -- */
35 $ctrl->setControllerDirectory('/chemin/vers/controleurs');
36 $ctrl->dispatch();
37 ]]></programlisting>
39         <para>
40             Nous encourageons l'utilisation de l'objet Réponse pour agréger le contenu et les
41             en-têtes. Ceci permet un basculement plus flexible entre les formats d'affichage (par
42             exemple, <acronym>JSON</acronym> ou <acronym>XML</acronym> au lieu de <acronym>XHTML</acronym>) dans vos applications. Par défaut,
43             <methodname>dispatch()</methodname> va effectuer le rendu de la réponse, envoyant à la fois les
44             en-têtes et tout contenu. Vous pouvez aussi avoir le contrôleur frontal qui retourne la
45             réponse en utilisant <methodname>returnResponse()</methodname>, et qui ensuite effectue le rendu de
46             la réponse suivant votre propre logique. Une version future du contrôleur frontal peut
47             mettre en application l'utilisation de l'objet Réponse via la
48             <ulink url="http://php.net/manual/fr/ref.outcontrol.php">bufferisation de
49             sortie</ulink>.
50         </para>
52         <para>
53             Il existe beaucoup d'autres fonctionnalités qui étendent l'API existante, et
54             celles-ci sont décrites dans la documentation.
55         </para>
57         <para>
58             Le changement le plus important auquel vous devrez faire attention apparaîtra
59             quand vous tenterez de sous-classer les différents composants. La clé se trouve
60             ci-dessous&#160;:
61         </para>
63         <itemizedlist>
64             <listitem>
65                 <para>
66                     <methodname>Zend_Controller_Front::dispatch()</methodname> intercepte par
67                     défaut les exceptions dans l'objet réponse, et ne les affiche pas, afin
68                     d'éviter l'affichage d'information sensible du système. Vous pouvez surcharger
69                     ceci de différentes manières&#160;:
70                 </para>
71                 <itemizedlist>
72                     <listitem>
73                         <para>
74                             Régler <methodname>throwExceptions()</methodname> dans le contrôleur frontal&#160;:
75                         </para>
76                         <programlisting language="php"><![CDATA[
77 $front->throwExceptions(true);
78 ]]></programlisting>
79                     </listitem>
80                     <listitem>
81                         <para>
82                             Régler <methodname>renderExceptions()</methodname> dans l'objet Réponse&#160;:
83                         </para>
84                         <programlisting language="php"><![CDATA[
85 $response->renderExceptions(true);
86 $front->setResponse($response);
87 $front->dispatch();
88 // ou :
89 $front->returnResponse(true);
90 $response = $front->dispatch();
91 $response->renderExceptions(true);
92 echo $response;
93 ]]></programlisting>
94                     </listitem>
95                 </itemizedlist>
96             </listitem>
97             <listitem>
98                 <para>
99                     <methodname>Zend_Controller_Dispatcher_Interface::dispatch()</methodname>
100                     accepte maintenant et retourne un objet
101                     <xref linkend="zend.controller.request" /> au lieu d'un élément du
102                     distributeur.
103                 </para>
104             </listitem>
105             <listitem>
106                 <para>
107                     <methodname>Zend_Controller_Router_Interface::route()</methodname> accepte
108                     maintenant et retourne un objet <xref linkend="zend.controller.request" /> au
109                     lieu d'un élément du distributeur.
110                 </para>
111             </listitem>
112             <listitem>
113                 <para>
114                     Les changements de <classname>Zend_Controller_Action</classname>
115                     incluent&#160;:
116                 </para>
117                 <itemizedlist>
118                     <listitem>
119                         <para>
120                             Le constructeur accepte maintenant exactement trois arguments,
121                             <classname>Zend_Controller_Request_Abstract $request</classname>,
122                             <classname>Zend_Controller_Response_Abstract $response</classname>, et
123                             le tableau facultatif <varname>$params</varname>.
124                             <methodname>Zend_Controller_Action::__construct()</methodname> les
125                             utilise pour affecter la requête, la réponse, et les propriétés
126                             <code>invokeArgs</code> de l'objet, et si vous devez surcharger le
127                             constructeur, vous devez faire de même. La meilleure solution est
128                             d'utiliser la méthode <methodname>init()</methodname> pour réaliser toute
129                             configuration de l'instance, puisque cette méthode est appelée en tant
130                             que action finale du constructeur.
131                         </para>
132                     </listitem>
133                     <listitem>
134                         <para>
135                             <methodname>run()</methodname> n'est plus défini en tant qu'élément final,
136                             mais n'est pas non plus utilisé par le contrôleur frontal ; son seul
137                             but apparaît lors de l'utilisation de la classe en tant que contrôleur
138                             de page. Il prend maintenant deux arguments facultatifs, un
139                             <classname>Zend_Controller_Request_Abstract $request</classname> et un
140                             <classname>Zend_Controller_Response_Abstract
141                             $response</classname>.
142                         </para>
143                     </listitem>
144                     <listitem>
145                         <para>
146                             <methodname>indexAction()</methodname> ne nécessite plus d'être défini, mais
147                             est recommandé en tant qu'action par défaut. Ceci permet lors de
148                             l'utilisation de <code>RewriteRouter</code> et des contrôleurs d'action
149                             de spécifier différentes méthodes d'action par défaut.
150                         </para>
151                     </listitem>
152                     <listitem>
153                         <para>
154                             <methodname>__call()</methodname> peut être surchargé pour gérer
155                             automatiquement les actions non définies.
156                         </para>
157                     </listitem>
158                     <listitem>
159                         <para>
160                             <methodname>_redirect()</methodname> prend maintenant un second paramètre
161                             facultatif, le code <acronym>HTTP</acronym> à retourner avec la redirection, et un
162                             troisième paramètre optionnel, <varname>$prependBase</varname>, qui peut
163                             indiquer que l'URL de base enregistré avec l'objet requête peut être
164                             ajouté en tant que suffixe à l'URL spécifié.
165                         </para>
166                     </listitem>
167                     <listitem>
168                         <para>
169                             La propriété <code>_action</code> n'existe plus. Cette propriété
170                             était un <classname>Zend_Controller_Dispatcher_Token</classname>, qui
171                             n'existe plus maintenant. Le seul but de cet élément est de fournir
172                             l'information concernant le contrôleur, l'action et les paramètres
173                             d'URL de la requête. Cette information est maintenant disponible dans
174                             l'objet requête, et peut être interrogé comme ceci&#160;:
175                         </para>
176                         <programlisting language="php"><![CDATA[
177 // Récupère le nom de controleur de la requête
178 // L'accès se fait via : $this->_action->getControllerName().
179 // L'exemple ci-dessous utilise getRequest(), bien que vous pourriez
180 // accéder directement à la propriété $_request ;
181 // l'utilisation de getRequest() est recommandée puisque la classe
182 // parente peut surcharger l'accès à l'objet requête.
183 $controller = $this->getRequest()->getControllerName();
185 // Recupere le nom de l'action de la requete
186 // L'acces se fait via : $this->_action->getActionName().
187 $action = $this->getRequest()->getActionName();
189 // Recupere les parametres de la requete
190 // Ceci n'a pas changé ; les méthodes _getParams() et _getParam()
191 // relaient simplement l'objet requete maintenant.
192 $params = $this->_getParams();
193 $foo = $this->_getParam('foo', 'default');
194 // parametre de la requete 'foo', en utilisant 'default'
195 // en tant que valeur par défaut si aucune valeur n'est trouvée
196 ]]></programlisting>
197                     </listitem>
198                     <listitem>
199                         <para>
200                             <methodname>noRouteAction()</methodname> a été effacée. La manière appropriée
201                             de gérer les méthodes d'actions non-existantes est de les router vers
202                             une action par défaut en utilisant <methodname>__call()</methodname>&#160;:
203                         </para>
204                         <programlisting language="php"><![CDATA[
205 public function __call($method, $args)
207     // Si la méthode requetee ne correspond a aucune methode 'Action',
208     // on renvoie vers la méthode d'action par défaut :
209     if ('Action' == substr($method, -6)) {
210         return $this->defaultAction();
211     }
213     throw new Zend_Controller_Exception('Appel de methode invalide');
215 ]]></programlisting>
216                     </listitem>
217                 </itemizedlist>
218             </listitem>
219             <listitem>
220                 <para>
221                     <methodname>Zend_Controller_RewriteRouter::setRewriteBase()</methodname> a
222                     été effacée. Utilisez plutôt
223                     <methodname>Zend_Controller_Front::setBaseUrl()</methodname> (ou
224                     Zend_Controller_Request_Http::setBaseUrl(), si vous utilisez cette classe de
225                     requête).
226                 </para>
227             </listitem>
228             <listitem>
229                 <para>
230                     <classname>Zend_Controller_Plugin_Interface</classname> a été remplacée
231                     par <classname>Zend_Controller_Plugin_Abstract</classname>. Toutes les méthodes
232                     acceptent et retournent maintenant un objet
233                     <xref linkend="zend.controller.request" /> au lieu d'un élément du
234                     distributeur.
235                 </para>
236             </listitem>
237         </itemizedlist>
238     </sect2>
239 </sect1>