<?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&#160;; 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&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    Meilleure option : renommez vos scripts de vue. Pour&#160;: compatibilité
                    ascendante. Contre&#160;: 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&#160;: 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&#160;:
                </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&#160;; 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&#160;: vous pouvez forcer le distributeur à
                    distribuer les noms d'action écrits en notationCamel avec un nouveau drapeau du
                    contrôleur frontal, <code>useCaseSensitiveActions</code>&#160;:
                </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>
