| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="migration.15">
- <title>Zend Framework 1.5</title>
- <para>
- Lors de la migration d'un version précédente vers Zend Framework 1.5 ou plus récent
- vous devriez prendre note de ce qui suit.
- </para>
- <sect2 id="migration.15.zend.controller">
- <title>Zend_Controller</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>
- </sect1>
|