| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 17171 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.controller.migration">
- <title>Migrer depuis des versions précédentes</title>
- <para>
- L'API des composants <acronym>MVC</acronym> a changé plusieurs fois. Si vous avez débuté avec des
- versions antérieures de Zend Framework, suivez les recommandations suivantes pour migrer
- vos scripts afin d'utiliser la nouvelle architecture.
- </para>
- <sect2 id="zend.controller.migration.fromoneseventooneeight">
- <title>Migrer de la version 1.7.x vers 1.8.0 ou plus récent</title>
- <sect3 id="zend.controller.migration.fromoneseventooneeight.router">
- <title>Changement de la route standard</title>
- <para>
- Comme les segments traduits ont été ajoutés dans la nouvelle route standard, le
- caractère <code>@</code> est maintenant un caractère spécial au début d'un segment
- de route. Pour être capable de l'utiliser dans un segment statique, vous devez
- l'échapper en le préfixant avec un second <code>@</code>. La même règle s'applique
- aussi au caractère <code>:</code>.
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.controller.migration.fromonesixtooneseven">
- <title>Migrer de la version 1.6.x vers 1.7.0 ou plus récent</title>
- <sect3 id="zend.controller.migration.fromonesixtooneseven.dispatcher">
- <title>Changement dans l'interface Dispatcher</title>
- <para>
- Les utilisateurs ont portés l'attention sur le fait que
- <classname>Zend_Controller_Action_Helper_ViewRenderer</classname> utilisait une
- méthode de la classe abstraite du distributeur standard qui n'était pas présente
- dans l'interface Dispatcher.La méthode suivante a donc été ajoutée pour s'assurer
- que les distributeurs personnalisés continueront à fonctionner avec les
- implémentations embarquées :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>formatModuleName()</methodname> : devrait être utilisé pour prendre
- un nom de contrôleur brut, comme un qui aurait été embarqué dans un objet
- requête, et pour le formater en un nom de classe approprié qu'une classe
- étendant <classname>Zend_Controller_Action</classname> pourra
- utiliser.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- <sect2 id="zend.controller.migration.fromoneohtoonesix">
- <title>Migrer de la version 1.5.x vers 1.6.0 ou plus récent</title>
- <sect3 id="zend.controller.migration.fromoneohtoonesix.dispatcher">
- <title>Changement dans l'interface Dispatcher</title>
- <para>
- Les utilisateurs ont porté à notre connaissance le fait que
- <classname>Zend_Controller_Front</classname> et
- <classname>Zend_Controller_Router_Route_Module</classname> utilisent tous les deux
- des méthodes du distributeur qui ne sont pas dans l'interface associée. Nous avons
- donc ajouté les trois méthodes suivantes pour s'assurer que les distributeurs
- personnalisés continueront à fonctionner avec les implémentations embarquées :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>getDefaultModule()</methodname> : retourne le nom du module par
- défaut.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getDefaultControllerName()</methodname> : retourne le nom du
- contrôleur par défaut.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getDefaultAction()</methodname> : retourne le nom de l'action par
- défaut.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- <sect2 id="zend.controller.migration.fromoneohtoonefive">
- <title>Migrer de la version 1.0.x vers 1.5.0 ou plus récent</title>
- <para>
- Bien que la plupart des fonctionnalités de base demeurent les mêmes, et que
- toutes les fonctionnalités documentées restent les mêmes, il existe une
- "fonctionnalité" particulière <emphasis>non documentée</emphasis> qui a changé.
- </para>
- <para>
- Quand vous écrivez des <acronym>URL</acronym>s, la manière documentée d'écrire les noms d'action en
- notationCamel est d'utiliser un séparateur de mot ; ceux ci sont "." ou "-" par défaut,
- mais ils peuvent être configurés dans le distributeur. Le distributeur en interne
- transforme les noms d'action en minuscules, et utilise ces séparateurs de mots pour
- ré-assembler la méthode d'action en utilisant la notationCamel. Cependant, comme les
- fonctions <acronym>PHP</acronym> ne sont pas sensibles à la casse, vous <emphasis>pouvez</emphasis>
- toujours écrire les <acronym>URL</acronym>s en utilisant la notationCamel, et le distributeur les résoudra
- de la même manière. Par exemple, "notation-camel" deviendra "notationCamelAction" dans
- le distributeur, tandis que "notationCamel" deviendra "notationcamelAction" ;
- cependant, à cause de l'insensibilité à la casse de <acronym>PHP</acronym>, dans les deux cas cela
- exécutera la même méthode.
- </para>
- <para>
- Ceci pose des problèmes avec le <code>ViewRenderer</code> lors de la résolution
- des scripts de vue. La manière canonique et documentée est que tous les séparateurs de
- mot sont convertis en tirets, et les mots en minuscules. Ceci crée un lien sémantique
- entre les actions et les scripts de vue, et la normalisation s'assure que les scripts
- peuvent être trouvés. Cependant, si l'action "notationCamel" est appelée et est
- résolue, le séparateur de mot n'est pas pour autant présent, et le
- <code>ViewRenderer</code> tente de résoudre un emplacement différent -
- "notationcamel.phtml" au lieu de "notation-camel.phtml".
- </para>
- <para>
- Quelques développeurs se sont fondés sur ce "dispositif", qui n'a jamais été
- prévu. Plusieurs changements de l'arbre 1.5.0, cependant, l'ont fait de sorte que le
- <code>ViewRenderer</code> ne résout plus ces chemins ; le lien sémantique est
- maintenant imposé. A partir de maintenant, le distributeur impose la sensibilité à la
- casse dans les noms d'action. Ceci veut dire que la référence vers vos actions dans
- l'URL en utilisant la notationCamel ne résoudra plus les mêmes méthodes qu'en utilisant
- les séparateurs de mots (par ex., "notation-camel"). Ceci entraîne qu'à partir de
- maintenant le <code>ViewRenderer</code> honorera seulement les actions en
- "mots-séparés" lors de la résolution des scripts de vue.
- </para>
- <para>
- Si vous constatez que vous comptiez sur ce "dispositif", vous avez plusieurs
- options :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Meilleure option : renommez vos scripts de vue. Pour : compatibilité
- ascendante. Contre : si vous avez beaucoup de scripts de vue basés sur
- l'ancien, comportement fortuit, vous aurez beaucoup de renommage à
- faire.
- </para>
- </listitem>
- <listitem>
- <para>
- Seconde meilleure option : le <code>ViewRenderer</code> délégue
- maintenant la résolution des scripts de vue à
- <classname>Zend_Filter_Inflector</classname> ; vous pouvez modifier les règles
- de l'inflecteur pour ne plus séparer les mots d'une action avec un tiret :
- </para>
- <programlisting language="php"><![CDATA[
- $viewRenderer =
- Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
- $inflector = $viewRenderer->getInflector();
- $inflector->setFilterRule(':action', array(
- new Zend_Filter_PregReplace(
- '#[^a-z0-9' . preg_quote(DIRECTORY_SEPARATOR, '#') . ']+#i',
- ''
- ),
- 'StringToLower'
- ));
- ]]></programlisting>
- <para>
- Le code ci-dessus modifiera l'inflecteur pour ne plus séparer les mots
- avec un tiret ; vous pouvez aussi vouloir supprimer le filtre
- <code>StringToLower</code> si vous <emphasis>voulez</emphasis> que vos scripts
- de vues utilisent aussi la notationCamel.
- </para>
- <para>
- Si le renommage de vos scripts de vue est trop fastidieux ou nécessite
- trop de temps, ceci est la meilleure option avant de trouver le temps de le
- faire.
- </para>
- </listitem>
- <listitem>
- <para>
- Option la moins souhaitable : vous pouvez forcer le distributeur à
- distribuer les noms d'action écrits en notationCamel avec un nouveau drapeau du
- contrôleur frontal, <code>useCaseSensitiveActions</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $front->setParam('useCaseSensitiveActions', true);
- ]]></programlisting>
- <para>
- Ceci vous permettra d'utiliser la notationCamel dans l'URL et de toujours
- faire résoudre la même action que si vous utilisez les séparateurs de mots.
- Cependant, ceci signifiera que les problèmes décrits ci-dessus interviendront
- tôt ou tard ; vous devrez probablement utiliser la deuxième option ci-dessus en
- plus de celle-ci pour que tout fonctionne correctement.
- </para>
- <para>
- Notez, de plus, que l'utilisation de ce drapeau déclenchera une
- <code>notice</code> indiquant que cette utilisation est dépréciée.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.controller.migration.fromzeroninethree">
- <title>Migrer de la version 0.9.3 vers 1.0.0RC1 ou plus récent</title>
- <para>
- Les principaux changements introduits dans la version 1.0.0RC1 sont l'ajout et
- l'activation par défaut du plugin
- <link linkend="zend.controller.plugins.standard.errorhandler">ErrorHandler</link>et de
- l'aide d'action
- <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>.
- Veuillez lire la documentation de chacun des éléments directement pour apprendre leur
- fonctionnement et quels effets, ils peuvent avoir sur vos applications.
- </para>
- <para>
- Le plugin <code>ErrorHandler</code> est exécuté pendant
- <methodname>postDispatch()</methodname> vérifiant la présence d'exceptions, et redirigeant vers le
- contrôleur de gestion d'erreur spécifié. Vous pouvez le désactiver en réglant le
- paramètre <code>noErrorHandler</code> du contrôleur frontal :
- </para>
- <programlisting language="php"><![CDATA[
- $front->setParam('noErrorHandler', true);
- ]]></programlisting>
- <para>
- L'aide d'action <code>ViewRenderer</code> automatise l'injection de vues dans les
- contrôleurs d'action en tant qu'autogénération des scripts de vues suivant l'action
- courante. Le principal problème que vous pourriez rencontrer intervient quand vous avez
- des actions qui ne rendent pas de scripts de vues ni ne font suivre ou redirige, alors
- <code>ViewRenderer</code> va tenter de rendre un script de vue basé sur le nom de
- l'action.
- </para>
- <para>
- Il existe plusieurs possibilités pour mettre à jour votre code. Dans un premier
- temps, vous pouvez globalement désactiver <code>ViewRenderer</code> dans votre fichier
- d'amorçage du contrôleur frontal avant toute distribution :
- </para>
- <programlisting language="php"><![CDATA[
- // En considérant que $front est une instance de Zend_Controller_Front
- $front->setParam('noViewRenderer', true);
- ]]></programlisting>
- <para>
- Cependant, ceci n'est pas une bonne stratégie à long terme, car il apparaît
- aisément que vous devrez écrire plus de code.
- </para>
- <para>
- Quand vous serez prêt à utiliser la fonctionnalité <code>ViewRenderer</code>, il
- y a plusieurs choses à vérifier dans votre code de contrôleur. Premièrement, regardez
- vos méthodes d'actions (les méthodes se terminant par "Action"), et déterminez ce que
- chacune d'elle réalise. Si rien de ce qui suit n'est réalisé, vous devrez réaliser des
- changements :
- </para>
- <itemizedlist>
- <listitem>
- <para>Appel de <code>$this->render()</code></para>
- </listitem>
- <listitem>
- <para>Appel de <code>$this->_forward()</code></para>
- </listitem>
- <listitem>
- <para>Appel de <code>$this->_redirect()</code></para>
- </listitem>
- <listitem>
- <para>Appel de l'aide d'action <code>Redirector</code></para>
- </listitem>
- </itemizedlist>
- <para>
- Le changement le plus simple est la désactivation de l'auto-rendu pour cette
- méthode :
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->viewRenderer->setNoRender();
- ]]></programlisting>
- <para>
- Si vous trouvez qu'aucune de vos méthodes d'actions n'effectue de rendu, ne font
- suivre, ou redirige, vous pouvez préférer mettre la ligne suivante dans la méthode
- <methodname>preDispatch()</methodname> ou <methodname>init()</methodname> :
- </para>
- <programlisting language="php"><![CDATA[
- public function preDispatch()
- {
- // désactive l'auto-rendu des scripts de vues
- $this->_helper->viewRenderer->setNoRender()
- // ... faire autre chose ...
- }
- ]]></programlisting>
- <para>
- Si vous appelez <methodname>render()</methodname>, et que vous utilisez la
- <link linkend="zend.controller.modular">structure de dossier modulaire
- conventionnelle</link>, vous voudrez modifier votre code pour utiliser
- l'auto-rendu :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Si vous rendez de multiples scripts de vues dans une seule action, vous
- n'avez rien à modifier.
- </para>
- </listitem>
- <listitem>
- <para>
- Si vous appelez simplement <methodname>render()</methodname> sans aucun argument,
- vous pouvez effacer ces lignes.
- </para>
- </listitem>
- <listitem>
- <para>
- Si vous appelez <methodname>render()</methodname> avec des arguments, et que vous ne
- réalisez pas ensuite d'exécution de code ou effectuez le rendu de scripts de
- vues multiples, vous pouvez changer ces appels par
- <code>$this->_helper->viewRenderer()</code>.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Si vous n'utilisez pas la structure de dossier modulaire conventionnelle, il
- existe une variété de méthodes pour paramétrer le chemin de base des vues et les
- spécifications du chemin vers les scripts ainsi vous pourrez utiliser
- <code>ViewRenderer</code>. Veuillez lire la
- <link linkend="zend.controller.actionhelpers.viewrenderer">documentation de
- ViewRenderer</link>pour plus d'informations sur ces méthodes.
- </para>
- <para>
- Si vous utilisez un objet de vue issu du registre, ou que vous personnalisez
- votre objet vue, ou que vous utilisez une implémentation de vue différente, vous pouvez
- vouloir injecter <code>ViewRenderer</code> dans cet objet. Ceci peut être réalisé
- facilement à tout moment.
- </para>
- <itemizedlist>
- <listitem>
- <para>Avant la distribution d'une instance de contrôleur frontal :</para>
- <programlisting language="php"><![CDATA[
- // En considérant que $view a déjà été définie
- $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
- Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>A tout moment durant le processus d'amorçage :</para>
- <programlisting language="php"><![CDATA[
- $viewRenderer =
- Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
- $viewRenderer->setView($view);
- ]]></programlisting>
- </listitem>
- </itemizedlist>
- <para>
- Il existe plusieurs manières de modifier <code>ViewRenderer</code>, incluant le
- réglage d'un script de vue différent à rendre, la spécification d'un remplaçant pour
- tous les éléments remplaçables d'un chemin de script de vues (incluant le suffixe), le
- choix d'un segment nommé de la réponse à utiliser, et plus encore. Si vous n'utilisez
- pas la structure de dossier modulaire conventionnelle, vous pouvez tout de même
- associer différentes spécifications de chemin à <code>ViewRenderer</code>.
- </para>
- <para>
- Nous vous encourageons à adapter votre code pour utiliser
- <code>ErrorHandler</code> et <code>ViewRenderer</code> puisqu'il s'agit maintenant de
- fonctionnalités natives.
- </para>
- </sect2>
- <sect2 id="zend.controller.migration.fromzeroninetwo">
- <title>Migrer de la version 0.9.2 vers 0.9.3 ou plus récent</title>
- <para>
- 0.9.3 introduit les
- <link linkend="zend.controller.actionhelpers">aides d'actions</link>. En lien avec ce
- changement, les méthodes suivantes ont été effacées puisqu'elles sont maintenant
- encapsulées dans
- <link linkend="zend.controller.actionhelpers.redirector">l'aide d'action
- redirector</link> :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setRedirectCode()</methodname> à remplacer par
- <methodname>Zend_Controller_Action_Helper_Redirector::setCode()</methodname>.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setRedirectPrependBase()</methodname> à remplacer par
- <methodname>Zend_Controller_Action_Helper_Redirector::setPrependBase()</methodname>.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setRedirectExit()</methodname> à remplacer par
- <methodname>Zend_Controller_Action_Helper_Redirector::setExit()</methodname>.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Lisez la
- <link linkend="zend.controller.actionhelpers">documentation des aides
- d'actions</link>pour plus d'informations sur la récupération ou la manipulation des
- objets "helper", et la
- <link linkend="zend.controller.actionhelpers.redirector">documentation du helper
- redirector</link>pour plus d'informations sur le réglage des options de redirection (de
- même que pour les méthodes alternatives de redirection).
- </para>
- </sect2>
- <sect2 id="zend.controller.migration.fromzerosix">
- <title>Migrer de la version 0.6.0 vers 0.8.0 ou plus récent</title>
- <para>
- Pour les versions précédentes, l'utilisation basique des composants <acronym>MVC</acronym> reste la
- même :
- </para>
- <programlisting language="php"><![CDATA[
- Zend_Controller_Front::run('/chemin/vers/controleurs');
- ]]></programlisting>
- <para>
- Cependant, la structure des dossiers a subi une réorganisation, certains
- composants ont été effacés, et d'autres ont été soit renommés soit ajoutés. Les
- changements incluent :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <classname>Zend_Controller_Router</classname> a été effacé en faveur du
- routeur de réécriture ("rewrite router").
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_RewriteRouter</classname> a été renommé en
- <classname>Zend_Controller_Router_Rewrite</classname>, et promu en tant que
- routeur standard fourni avec le framework ;
- <classname>Zend_Controller_Front</classname> l'utilise par défaut si aucun
- autre routeur n'est fourni.
- </para>
- </listitem>
- <listitem>
- <para>
- Une nouvelle classe de route à utiliser avec le routeur de réécriture a
- été introduite, <classname>Zend_Controller_Router_Route_Module</classname> ;
- elle couvre la route par défaut utilisée par le <acronym>MVC</acronym>, et supporte les
- <link linkend="zend.controller.modular">modules de contrôleurs</link>.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Router_StaticRoute</classname> a été renommé
- en <classname>Zend_Controller_Router_Route_Static</classname>.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Dispatcher</classname> a été renommé en
- <classname>Zend_Controller_Dispatcher_Standard</classname>.
- </para>
- </listitem>
- <listitem>
- <para>
- Les arguments de
- <methodname>Zend_Controller_Action::_forward()</methodname> ont changés. La
- signature est maintenant :
- </para>
- <programlisting language="php"><![CDATA[
- final protected function _forward($action,
- $controller = null,
- $module = null,
- array $params = null);
- ]]></programlisting>
- <para>
- <varname>$action</varname> est toujours obligatoire ; si aucun contrôleur n'est
- spécifié, une action dans le contrôleur courant est considérée.
- <varname>$module</varname> est toujours ignoré à moins que <varname>$controller</varname>
- ne soit spécifié. Pour finir, tout <varname>$params</varname> fourni sera ajouté à
- l'objet requête. Si aucun contrôleur ou module n'est nécessaire, mais que des
- paramètres le sont, passez simplement <constant>NULL</constant> pour ces
- valeurs.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.controller.migration.fromzerotwo">
- <title>Migrer de la version 0.2.0 ou plus ancien vers 0.6.0</title>
- <para>
- L'utilisation de base des composants <acronym>MVC</acronym> n'a pas changé ; vous pouvez toujours
- faire comme suit :
- </para>
- <programlisting language="php"><![CDATA[
- Zend_Controller_Front::run('/chemin/vers/controleurs');
- ]]></programlisting>
- <programlisting language="php"><![CDATA[
- /* -- créer un routeur -- */
- $router = new Zend_Controller_RewriteRouter();
- $router->addRoute('user', 'user/:username', array('controller' => 'user',
- 'action' => 'info'));
- /* -- l'affecter à un contrôleur -- */
- $ctrl = Zend_Controller_Front::getInstance();
- $ctrl->setRouter($router);
- /* -- régler le répertoire des contrôleurs et distribuer -- */
- $ctrl->setControllerDirectory('/chemin/vers/controleurs');
- $ctrl->dispatch();
- ]]></programlisting>
- <para>
- Nous encourageons l'utilisation de l'objet Réponse pour agréger le contenu et les
- en-têtes. Ceci permet un basculement plus flexible entre les formats d'affichage (par
- exemple, <acronym>JSON</acronym> ou <acronym>XML</acronym> au lieu de <acronym>XHTML</acronym>) dans vos applications. Par défaut,
- <methodname>dispatch()</methodname> va effectuer le rendu de la réponse, envoyant à la fois les
- en-têtes et tout contenu. Vous pouvez aussi avoir le contrôleur frontal qui retourne la
- réponse en utilisant <methodname>returnResponse()</methodname>, et qui ensuite effectue le rendu de
- la réponse suivant votre propre logique. Une version future du contrôleur frontal peut
- mettre en application l'utilisation de l'objet Réponse via la
- <ulink url="http://php.net/manual/fr/ref.outcontrol.php">bufferisation de
- sortie</ulink>.
- </para>
- <para>
- Il existe beaucoup d'autres fonctionnalités qui étendent l'API existante, et
- celles-ci sont décrites dans la documentation.
- </para>
- <para>
- Le changement le plus important auquel vous devrez faire attention apparaîtra
- quand vous tenterez de sous-classer les différents composants. La clé se trouve
- ci-dessous :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>Zend_Controller_Front::dispatch()</methodname> intercepte par
- défaut les exceptions dans l'objet réponse, et ne les affiche pas, afin
- d'éviter l'affichage d'information sensible du système. Vous pouvez surcharger
- ceci de différentes manières :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Régler <methodname>throwExceptions()</methodname> dans le contrôleur frontal :
- </para>
- <programlisting language="php"><![CDATA[
- $front->throwExceptions(true);
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>
- Régler <methodname>renderExceptions()</methodname> dans l'objet Réponse :
- </para>
- <programlisting language="php"><![CDATA[
- $response->renderExceptions(true);
- $front->setResponse($response);
- $front->dispatch();
- // ou :
- $front->returnResponse(true);
- $response = $front->dispatch();
- $response->renderExceptions(true);
- echo $response;
- ]]></programlisting>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- <methodname>Zend_Controller_Dispatcher_Interface::dispatch()</methodname>
- accepte maintenant et retourne un objet
- <xref linkend="zend.controller.request" /> au lieu d'un élément du
- distributeur.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>Zend_Controller_Router_Interface::route()</methodname> accepte
- maintenant et retourne un objet <xref linkend="zend.controller.request" /> au
- lieu d'un élément du distributeur.
- </para>
- </listitem>
- <listitem>
- <para>
- Les changements de <classname>Zend_Controller_Action</classname>
- incluent :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Le constructeur accepte maintenant exactement trois arguments,
- <classname>Zend_Controller_Request_Abstract $request</classname>,
- <classname>Zend_Controller_Response_Abstract $response</classname>, et
- le tableau facultatif <varname>$params</varname>.
- <methodname>Zend_Controller_Action::__construct()</methodname> les
- utilise pour affecter la requête, la réponse, et les propriétés
- <code>invokeArgs</code> de l'objet, et si vous devez surcharger le
- constructeur, vous devez faire de même. La meilleure solution est
- d'utiliser la méthode <methodname>init()</methodname> pour réaliser toute
- configuration de l'instance, puisque cette méthode est appelée en tant
- que action finale du constructeur.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>run()</methodname> n'est plus défini en tant qu'élément final,
- mais n'est pas non plus utilisé par le contrôleur frontal ; son seul
- but apparaît lors de l'utilisation de la classe en tant que contrôleur
- de page. Il prend maintenant deux arguments facultatifs, un
- <classname>Zend_Controller_Request_Abstract $request</classname> et un
- <classname>Zend_Controller_Response_Abstract
- $response</classname>.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>indexAction()</methodname> ne nécessite plus d'être défini, mais
- est recommandé en tant qu'action par défaut. Ceci permet lors de
- l'utilisation de <code>RewriteRouter</code> et des contrôleurs d'action
- de spécifier différentes méthodes d'action par défaut.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>__call()</methodname> peut être surchargé pour gérer
- automatiquement les actions non définies.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>_redirect()</methodname> prend maintenant un second paramètre
- facultatif, le code <acronym>HTTP</acronym> à retourner avec la redirection, et un
- troisième paramètre optionnel, <varname>$prependBase</varname>, qui peut
- indiquer que l'URL de base enregistré avec l'objet requête peut être
- ajouté en tant que suffixe à l'URL spécifié.
- </para>
- </listitem>
- <listitem>
- <para>
- La propriété <code>_action</code> n'existe plus. Cette propriété
- était un <classname>Zend_Controller_Dispatcher_Token</classname>, qui
- n'existe plus maintenant. Le seul but de cet élément est de fournir
- l'information concernant le contrôleur, l'action et les paramètres
- d'URL de la requête. Cette information est maintenant disponible dans
- l'objet requête, et peut être interrogé comme ceci :
- </para>
- <programlisting language="php"><![CDATA[
- // Récupère le nom de controleur de la requête
- // L'accès se fait via : $this->_action->getControllerName().
- // L'exemple ci-dessous utilise getRequest(), bien que vous pourriez
- // accéder directement à la propriété $_request ;
- // l'utilisation de getRequest() est recommandée puisque la classe
- // parente peut surcharger l'accès à l'objet requête.
- $controller = $this->getRequest()->getControllerName();
- // Recupere le nom de l'action de la requete
- // L'acces se fait via : $this->_action->getActionName().
- $action = $this->getRequest()->getActionName();
- // Recupere les parametres de la requete
- // Ceci n'a pas changé ; les méthodes _getParams() et _getParam()
- // relaient simplement l'objet requete maintenant.
- $params = $this->_getParams();
- $foo = $this->_getParam('foo', 'default');
- // parametre de la requete 'foo', en utilisant 'default'
- // en tant que valeur par défaut si aucune valeur n'est trouvée
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>
- <methodname>noRouteAction()</methodname> a été effacée. La manière appropriée
- de gérer les méthodes d'actions non-existantes est de les router vers
- une action par défaut en utilisant <methodname>__call()</methodname> :
- </para>
- <programlisting language="php"><![CDATA[
- public function __call($method, $args)
- {
- // Si la méthode requetee ne correspond a aucune methode 'Action',
- // on renvoie vers la méthode d'action par défaut :
- if ('Action' == substr($method, -6)) {
- return $this->defaultAction();
- }
- throw new Zend_Controller_Exception('Appel de methode invalide');
- }
- ]]></programlisting>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- <methodname>Zend_Controller_RewriteRouter::setRewriteBase()</methodname> a
- été effacée. Utilisez plutôt
- <methodname>Zend_Controller_Front::setBaseUrl()</methodname> (ou
- Zend_Controller_Request_Http::setBaseUrl(), si vous utilisez cette classe de
- requête).
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Plugin_Interface</classname> a été remplacée
- par <classname>Zend_Controller_Plugin_Abstract</classname>. Toutes les méthodes
- acceptent et retournent maintenant un objet
- <xref linkend="zend.controller.request" /> au lieu d'un élément du
- distributeur.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
|