<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="migration.10">
    <title>Zend Framework 1.0</title>

    <para>
        Lors de la migration d'un version précédente vers Zend Framework 0.8 ou plus récent
        vous devriez prendre note de ce qui suit.
    </para>

    <sect2 id="migration.10.zend.controller">
        <title>Zend_Controller</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&#160;:
        </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&#160;:
        </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&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>Appel de <code>$this-&gt;render()</code></para>
            </listitem>
            <listitem>
                <para>Appel de <code>$this-&gt;_forward()</code></para>
            </listitem>
            <listitem>
                <para>Appel de <code>$this-&gt;_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&#160;:
        </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>&#160;:
        </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&#160;:
        </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&#160;:</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&#160;:</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="migration.10.zend.currency">
        <title>Zend_Currency</title>

        <para>
            Créer un objet <classname>Zend_Currency</classname> est devenu plus simple. Vous
            n'avez plus besoin de passer un script ou de le mettre à <constant>NULL</constant>, le
            paramètre script est optionnel et peut être spécifié par la méthode
            <methodname>setFormat()</methodname>.
        </para>

        <programlisting language="php"><![CDATA[
$currency = new Zend_Currency($currency, $locale);
]]></programlisting>

        <para>
            La méthode <methodname>setFormat()</methodname> prend maintenant en paramètre un tableau
            d'options. Ces options sont permanentes et écrasent les précédentes déjà présentes. La
            nouvelle option "precision" a été intégrée&#160;:
            <itemizedlist mark="opencircle">
                <listitem>
                    <para>
                        <emphasis>position</emphasis>&#160;: Remplacement de l'ancien
                        paramètre "rules"
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>script</emphasis>&#160;: Remplacement de l'ancien
                        paramètre "script"
                    </para>

                </listitem>

                <listitem>
                    <para>
                        <emphasis>format</emphasis>&#160;: Remplacement de l'ancien
                        paramètre "locale" qui n'affecte plus de nouvelle monnaie, mais seulement un
                        format de nombre.
                    </para>

                </listitem>

                <listitem>
                    <para>
                        <emphasis>display</emphasis>&#160;: Remplacement de l'ancien
                        paramètre "rules"
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>precision</emphasis>&#160;: Nouveau paramètre
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>name</emphasis>&#160;: Remplacement de l'ancien
                        paramètre "rules". Affecte le nom complet de la monnaie.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <emphasis>currency</emphasis>&#160;: Nouveau paramètre
                    </para>
                </listitem>

                <listitem>
                    <para><emphasis>symbol</emphasis>&#160;: Nouveau paramètre</para>
                </listitem>
            </itemizedlist>
        </para>

        <programlisting language="php"><![CDATA[
$currency->setFormat(array $options);
]]></programlisting>

        <para>
            La méthode <methodname>toCurrency()</methodname> ne supporte plus les paramètres optionnels
            "script" et "locale". A la place, elle accepte un tableau d'options qui sera de la même
            forme que celui utilisé par <code>setFormat</code>.
        </para>

        <programlisting language="php"><![CDATA[
$currency->toCurrency($value, array $options);
]]></programlisting>

        <para>
            Les méthodes <methodname>getSymbol()</methodname>, <methodname>getShortName()</methodname>,
            <methodname>getName()</methodname>, <methodname>getRegionList()</methodname> et <methodname>getCurrencyList()</methodname>
            ne sont plus statiques. Elles retournent les valeurs affectées dans l'objet, si on ne
            leur passe pas de paramètre.
        </para>
    </sect2>
</sect1>
