| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="migration.17">
- <title>Zend Framework 1.7</title>
- <para>
- Lors de la migration d'un version précédente vers Zend Framework 1.7 ou plus récent
- vous devriez prendre note de ce qui suit.
- </para>
- <sect2 id="migration.17.zend.controller">
- <title>Zend_Controller</title>
- <sect3 id="migration.17.zend.controller.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="migration.17.zend.file.transfer">
- <title>Zend_File_Transfer</title>
- <sect3 id="migration.17.zend.file.transfer.validators">
- <title>Changements quand vous utilisez des filtres ou des validateurs</title>
- <para>
- Certaines remarques des utilisateurs indiquaient que les validateurs de
- <classname>Zend_File_Transfer</classname> ne fonctionnaient pas correctement avec
- <classname>Zend_Config</classname> dû au fait qu'ils n'utilisait pas de tableaux
- nommés.
- </para>
- <para>
- De plus, tous les filtres et validateurs de
- <classname>Zend_File_Transfer</classname> ont été réécrits. Même si les anciennes
- signatures continuent à fonctionner, elles ont été marqués comme dépréciées et
- émettent une notice <acronym>PHP</acronym> vous informant de faire le changement.
- </para>
- <para>
- La liste suivante vous montre les changements à réaliser pour une utilisation
- appropriée des paramètres.
- </para>
- <sect4 id="migration.17.zend.file.transfer.validators.rename">
- <title>Filtre Rename</title>
- <itemizedlist>
- <listitem>
- <para>
- Ancienne <acronym>API</acronym> : <classname>Zend_Filter_File_Rename($oldfile,
- $newfile, $overwrite)</classname>
- </para>
- </listitem>
- <listitem>
- <para>
- Nouvelle <acronym>API</acronym> :
- <methodname>Zend_Filter_File_Rename($options)</methodname> où
- <varname>$options</varname> accepte un tableau avec les clés suivantes :
- <emphasis>source</emphasis> est équivalent à <varname>$oldfile</varname>,
- <emphasis>target</emphasis> est équivalent à <varname>$newfile</varname>,
- <emphasis>overwrite</emphasis> est équivalent à
- <code>$overwrite.</code>
- </para>
- </listitem>
- </itemizedlist>
- <example id="migration.17.zend.file.transfer.validators.rename.example">
- <title>Changer le filtre rename entre 1.6 et 1.7</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour 1.6
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addFilter('Rename',
- array('/path/to/oldfile', '/path/to/newfile', true));
- // Même exemple pour 1.7
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addFilter('Rename',
- array('source' => '/path/to/oldfile',
- 'target' => '/path/to/newfile',
- 'overwrite' => true));
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="migration.17.zend.file.transfer.validators.count">
- <title>Validateur Count</title>
- <itemizedlist>
- <listitem>
- <para>
- Ancienne <acronym>API</acronym> : <classname>Zend_Validate_File_Count($min,
- $max)</classname>
- </para>
- </listitem>
- <listitem>
- <para>
- Nouvelle <acronym>API</acronym> :
- <methodname>Zend_Validate_File_Count($options)</methodname> où
- <varname>$options</varname> accepte un tableau avec les clés suivantes :
- <emphasis>min</emphasis> est équivalent à <varname>$min</varname>,
- <emphasis>max</emphasis> est équivalent à <varname>$max</varname>.
- </para>
- </listitem>
- </itemizedlist>
- <example id="migration.17.zend.file.transfer.validators.count.example">
- <title>Changer le validateur count entre 1.6 et 1.7</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour 1.6
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Count',
- array(2, 3));
- // Même exemple pour 1.7
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Count',
- false,
- array('min' => 2,
- 'max' => 3));
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="migration.17.zend.file.transfer.validators.extension">
- <title>Validateur Extension</title>
- <itemizedlist>
- <listitem>
- <para>
- Ancienne <acronym>API</acronym> : <classname>Zend_Validate_File_Extension($extension,
- $case)</classname>
- </para>
- </listitem>
- <listitem>
- <para>
- Nouvelle <acronym>API</acronym> :
- <methodname>Zend_Validate_File_Extension($options)</methodname> où
- <varname>$options</varname> accepte un tableau avec les clés suivantes :
- <emphasis>*</emphasis> est équivalent à <varname>$extension</varname> et peut
- avoir tout autre clé, <emphasis>case</emphasis> est équivalent à
- <varname>$case</varname>.
- </para>
- </listitem>
- </itemizedlist>
- <example id="migration.17.zend.file.transfer.validators.extension.example">
- <title>Changer le validateur extension entre 1.6 et 1.7</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour 1.6
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Extension',
- array('jpg,gif,bmp', true));
- // Même exemple pour 1.7
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Extension',
- false,
- array('extension1' => 'jpg,gif,bmp',
- 'case' => true));
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="migration.17.zend.file.transfer.validators.filessize">
- <title>Validateur FilesSize</title>
- <itemizedlist>
- <listitem>
- <para>
- Ancienne <acronym>API</acronym> : <classname>Zend_Validate_File_FilesSize($min, $max,
- $bytestring)</classname>
- </para>
- </listitem>
- <listitem>
- <para>
- Nouvelle <acronym>API</acronym> :
- <methodname>Zend_Validate_File_FilesSize($options)</methodname> où
- <varname>$options</varname> accepte un tableau avec les clés suivantes :
- <emphasis>min</emphasis> est équivalent à <varname>$min</varname>,
- <emphasis>max</emphasis> est équivalent à <varname>$max</varname>,
- <emphasis>bytestring</emphasis> est équivalent à
- <varname>$bytestring</varname>.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- De plus la signature de la méthode <methodname>useByteString()</methodname> a changé.
- Elle peut être seulement utilisée pour tester si le validateur prévoie
- d'utiliser les chaînes lisibles ou la valeur brute dans les messages générées.
- Pour paramétrer la valeur de cette option, utilisez la méthode
- <methodname>setUseByteString()</methodname>.
- </para>
- <example id="migration.17.zend.file.transfer.validators.filessize.example">
- <title>Changer le validateur filessize entre 1.6 et 1.7</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour 1.6
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('FilesSize',
- array(100, 10000, true));
- // Même exemple pour 1.7
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('FilesSize',
- false,
- array('min' => 100,
- 'max' => 10000,
- 'bytestring' => true));
- // Exemple pour 1.6
- $upload->useByteString(true); // set flag
- // Même exemple pour 1.7
- $upload->setUseByteSting(true); // set flag
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="migration.17.zend.file.transfer.validators.hash">
- <title>Validateur Hash</title>
- <itemizedlist>
- <listitem>
- <para>
- Ancienne <acronym>API</acronym> : <classname>Zend_Validate_File_Hash($hash,
- $algorithm)</classname>
- </para>
- </listitem>
- <listitem>
- <para>
- Nouvelle <acronym>API</acronym> :
- <methodname>Zend_Validate_File_Hash($options)</methodname> où
- <varname>$options</varname> accepte un tableau avec les clés suivantes :
- <emphasis>*</emphasis> est équivalent à <varname>$hash</varname> et peut avoir
- tout autre clé, <emphasis>algorithm</emphasis> est équivalent à
- <varname>$algorithm</varname>.
- </para>
- </listitem>
- </itemizedlist>
- <example id="migration.17.zend.file.transfer.validators.hash.example">
- <title>Changer le validateur hash entre 1.6 et 1.7</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour 1.6
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Hash',
- array('12345', 'md5'));
- // Même exemple pour 1.7
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Hash',
- false,
- array('hash1' => '12345',
- 'algorithm' => 'md5'));
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="migration.17.zend.file.transfer.validators.imagesize">
- <title>Validateur ImageSize</title>
- <itemizedlist>
- <listitem>
- <para>
- Ancienne <acronym>API</acronym> : <classname>Zend_Validate_File_ImageSize($minwidth,
- $minheight, $maxwidth, $maxheight)</classname>
- </para>
- </listitem>
- <listitem>
- <para>
- Nouvelle <acronym>API</acronym> :
- <methodname>Zend_Validate_File_FilesSize($options)</methodname> où
- <varname>$options</varname> accepte un tableau avec les clés suivantes :
- <emphasis>minwidth</emphasis> est équivalent à <varname>$minwidth</varname>,
- <emphasis>maxwidth</emphasis> est équivalent à <varname>$maxwidth</varname>,
- <emphasis>minheight</emphasis> est équivalent à <varname>$minheight</varname>,
- <emphasis>maxheight</emphasis> est équivalent à
- <varname>$maxheight</varname>.
- </para>
- </listitem>
- </itemizedlist>
- <example id="migration.17.zend.file.transfer.validators.imagesize.example">
- <title>Changer le validateur imagesize entre 1.6 et 1.7</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour 1.6
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('ImageSize',
- array(10, 10, 100, 100));
- // Même exemple pour 1.7
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('ImageSize',
- false,
- array('minwidth' => 10,
- 'minheight' => 10,
- 'maxwidth' => 100,
- 'maxheight' => 100));
- ]]></programlisting>
- </example>
- </sect4>
- <sect4 id="migration.17.zend.file.transfer.validators.size">
- <title>Validateur Size</title>
- <itemizedlist>
- <listitem>
- <para>
- Ancienne <acronym>API</acronym> : <classname>Zend_Validate_File_Size($min, $max,
- $bytestring)</classname>
- </para>
- </listitem>
- <listitem>
- <para>
- Nouvelle <acronym>API</acronym> :
- <methodname>Zend_Validate_File_Size($options)</methodname> où
- <varname>$options</varname> accepte un tableau avec les clés suivantes :
- <emphasis>min</emphasis> est équivalent à <varname>$min</varname>,
- <emphasis>max</emphasis> est équivalent à <varname>$max</varname>,
- <emphasis>bytestring</emphasis> est équivalent à
- <varname>$bytestring</varname>
- </para>
- </listitem>
- </itemizedlist>
- <example id="migration.17.zend.file.transfer.validators.size.example">
- <title>Changer le validateur size entre 1.6 et 1.7</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour 1.6
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Size',
- array(100, 10000, true));
- // Même exemple pour 1.7
- $upload = new Zend_File_Transfer_Adapter_Http();
- $upload->addValidator('Size',
- false,
- array('min' => 100,
- 'max' => 10000,
- 'bytestring' => true));
- ]]></programlisting>
- </example>
- </sect4>
- </sect3>
- </sect2>
- <sect2 id="migration.17.zend.locale">
- <title>Zend_Locale</title>
- <sect3 id="migration.17.zend.locale.islocale">
- <title>Changement dans l'utilisation de isLocale()</title>
- <para>
- Conformément aux standards de codage <methodname>isLocale()</methodname> a été changé pour
- retourner un booléen. Dans les versions précédentes une chaîne était retournée lors
- du succès. Pour la version 1.7 un mode de compatibilité a été ajouté qui vous permet
- d'utiliser l'ancien comportement (avec une chaîne retournée), mais ceci émet un
- warning pour vous informer de changer vers le nouveau comportement. Le reroutage que
- l'ancien comportement de <methodname>isLocale()</methodname> pouvait avoir à faire n'est plus
- nécessaire car tous les composants de l'I18N traiteront maintenant eux-mêmes le
- reroutage.
- </para>
- <para>
- Pour migrer vos scripts vers la nouvelle <acronym>API</acronym>, utilisez simplement la méthode
- décrite ci-dessous.
- </para>
- <example id="migration.17.zend.locale.example">
- <title>Comment changer l'appel de isLocale() de 1.6 vers 1.7 ?</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour ZF 1.6
- if ($locale = Zend_Locale::isLocale($locale)) {
- // faire qqch
- }
- // Même exemple pour ZF 1.7
- // Vous devez changer le mode de compatibilité pour empêcher l'émission de warning
- // Mais ceci peut être fait dans votre bootstrap
- Zend_Locale::$compatibilityMode = false;
- if (Zend_Locale::isLocale($locale)) {
- }
- ]]></programlisting>
- <para>
- Notez que vous pouvez utiliser le second paramètre pour voir si la locale
- est correcte sans nécessiter de reroutage.
- </para>
- <programlisting language="php"><![CDATA[
- // Exemple pour ZF 1.6
- if ($locale = Zend_Locale::isLocale($locale, false)) {
- // do something
- }
- // Même exemple pour ZF 1.7
- // Vous devez changer le mode de compatibilité pour empêcher l'émission de warning
- // Mais ceci peut être fait dans votre bootstrap
- Zend_Locale::$compatibilityMode = false;
- if (Zend_Locale::isLocale($locale, false)) {
- if (Zend_Locale::isLocale($locale, true)) {
- // pas de locale du tout
- }
- // original string is no locale but can be rerouted
- }
- ]]></programlisting>
- </example>
- </sect3>
- <sect3 id="migration.17.zend.locale.getdefault">
- <title>Changement dans l'utilisation de getDefault()</title>
- <para>
- La signification de la méthode <methodname>getDefault()</methodname> a été changé étant
- donné que nous avons intégré une locale de framework qui peut être paramétrée avec
- <methodname>setDefault()</methodname>. Ceci ne renvoie plus la chaîne de la locale mais
- seulement la locale du framework.
- </para>
- <para>
- Pour migrer vos scripts vers la nouvelle <acronym>API</acronym>, utilisez simplement la méthode
- décrite ci-dessous.
- </para>
- <example id="migration.17.zend.locale.getdefault.example">
- <title>Comment changer l'appel de getDefaut() de 1.6 vers 1.7 ?</title>
- <programlisting language="php"><![CDATA[
- // Exemple pour ZF 1.6
- $locales = $locale->getDefault(Zend_Locale::BROWSER);
- // Même exemple pour ZF 1.7
- // Vous devez changer le mode de compatibilité pour empêcher l'émission de warning
- // Mais ceci peut être fait dans votre bootstrap
- Zend_Locale::$compatibilityMode = false;
- $locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);
- ]]></programlisting>
- <para>
- Notez que le second paramètre de l'ancienne implémentation de
- <methodname>getDefault()</methodname> n'est plus disponible non plus, mais les valeurs
- retournées sont les mêmes.
- </para>
- </example>
- <note>
- <para>
- Par défaut l'ancien comportement est toujours actif, mais émet un warning.
- Quand vous avez changé votre code vers le nouveau comportement, vous devriez
- aussi changer le mode de compatibilité à <constant>FALSE</constant> ainsi aucun nouveau
- warning ne sera émis.
- </para>
- </note>
- </sect3>
- </sect2>
- <sect2 id="migration.17.zend.translate">
- <title>Zend_Translate</title>
- <sect3 id="migration.17.zend.translate.languages">
- <title>Paramétrer les langues</title>
- <para>
- Lors de l'utilisation de la détection automatique des langues, ou du réglage
- manuel des langues de <classname>Zend_Translate</classname>, vous avez peut-être
- remarqué que de temps en temps une notice est envoyée concernant le non-ajout de
- traductions vides. Dans certaines versions précédentes, une exception était levée
- dans certains cas.
- </para>
- <para>
- Ceci intervient quand un utilisateur requête une langue non existante, vous
- n'avez alors aucun moyen simple de détecter ce qui ne va pas. Nous avons donc ajouté
- ces notices qui apparaîtront dans votre historisation et qui vous diront qu'un
- utilisateur a requêté une langue que vous ne supportez pas. Notez bien que votre
- code, même si une notice est déclenchée, fonctionnera sans problèmes.
- </para>
- <para>
- Mais quand vous utilisez votre propre gestionnaire d'erreur ou d'exception,
- comme xDebug, toutes les notices vous seront retournées, même si ce n'est pas votre
- intention initiale. Ceci est du au fait, que ces gestionnaires surchargent tous les
- réglages internes de <acronym>PHP</acronym>.
- </para>
- <para>
- Pour vous affranchir de ces notices, vous pouvez simplement paramétrer la
- nouvelle option <code>disableNotices</code> à <constant>TRUE</constant>, sa valeur par
- défaut étant <constant>FALSE</constant>.
- </para>
- <example id="migration.17.zend.translate.example">
- <title>Paramétrer les langues sans avoir de notices</title>
- <para>
- Assumons que "<code>fr</code>" soit disponible et qu'un utilisateur
- requête pour "<code>de</code>" qui ne fait pas partie de votre portefeuille de
- traductions.
- </para>
- <programlisting language="php"><![CDATA[
- $language = new Zend_Translate('gettext',
- '/chemin/vers/les/traductions',
- 'auto');
- ]]></programlisting>
- <para>
- Dans ce cas nous aurons une notice indiquant la non-disponibilité de la
- langue "<code>de</code>". Ajoutez simplement l'option et les notices seront
- désactivées.
- </para>
- <programlisting language="php"><![CDATA[
- $language = new Zend_Translate('gettext',
- '/chemin/vers/les/traductions',
- 'auto',
- array('disableNotices' => true));
- ]]></programlisting>
- </example>
- </sect3>
- </sect2>
- <sect2 id="migration.17.zend.view">
- <title>Zend_View</title>
- <note>
- <para>
- Les changements de l'API de <classname>Zend_View</classname> sont seulement
- notables pour vous si vous mettez à jour vers les version 1.7.5 ou plus récent.
- </para>
- </note>
- <para>
- Avant la version 1.7.5, l'équipe de Zend Framework a été avertie d'une faille
- potentielle d'inclusion de fichier local ("Local File Inclusion" (LFI)) dans la méthode
- <methodname>Zend_View::render()</methodname>. Avant 1.7.5, la méthode acceptait par défaut
- la possibilité de spécifier des scripts de vue comportant des indications de dossier
- parent (comme, "../" ou "..\"). Ceci ouvre la possibilité à une attaque LFI si des
- données utilisateurs non filtrées sont passées directement à la méthode
- <methodname>render()</methodname>:
- </para>
- <programlisting language="php"><![CDATA[
- // Ici, $_GET['foobar'] = '../../../../etc/passwd'
- echo $view->render($_GET['foobar']); // inclusion LFI
- ]]></programlisting>
- <para>
- <classname>Zend_View</classname> émet maintenant une exception dans un tel
- cas.
- </para>
- <sect3 id="zend.view.migration.zf5748.disabling">
- <title>Désactiver la protection LFI de render()</title>
- <para>
- Comme des développeurs utilisaient de telles notations, mais qui n'étaient
- <emphasis>pas</emphasis> des données en provenance de l'extérieur, un drapeau
- spécial a été crée, il permet de désactiver la protection. Pour manipuler ce
- drapeau, il existe 2 moyens : le paramètre 'lfiProtectionOn' du constructeur de
- votre vue, ou encore la méthode <methodname>setLfiProtection()</methodname>.
- </para>
- <programlisting language="php"><![CDATA[
- // Désactivation de la protection par le constructeur
- $view = new Zend_View(array('lfiProtectionOn' => false));
- // Désactivation de la protection par la méthode dédiée
- $view = new Zend_View();
- $view->setLfiProtection(false);
- ]]></programlisting>
- </sect3>
- </sect2>
- </sect1>
|