migration-15.xml 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="migration.15">
  5. <title>Zend Framework 1.5</title>
  6. <para>
  7. Lors de la migration d'un version précédente vers Zend Framework 1.5 ou plus récent
  8. vous devriez prendre note de ce qui suit.
  9. </para>
  10. <sect2 id="migration.15.zend.controller">
  11. <title>Zend_Controller</title>
  12. <para>
  13. Bien que la plupart des fonctionnalités de base demeurent les mêmes, et que
  14. toutes les fonctionnalités documentées restent les mêmes, il existe une
  15. "fonctionnalité" particulière <emphasis>non documentée</emphasis> qui a changé.
  16. </para>
  17. <para>
  18. Quand vous écrivez des <acronym>URL</acronym>s, la manière documentée d'écrire les noms d'action en
  19. notationCamel est d'utiliser un séparateur de mot ; ceux ci sont "." ou "-" par défaut,
  20. mais ils peuvent être configurés dans le distributeur. Le distributeur en interne
  21. transforme les noms d'action en minuscules, et utilise ces séparateurs de mots pour
  22. ré-assembler la méthode d'action en utilisant la notationCamel. Cependant, comme les
  23. fonctions <acronym>PHP</acronym> ne sont pas sensibles à la casse, vous <emphasis>pouvez</emphasis>
  24. toujours écrire les <acronym>URL</acronym>s en utilisant la notationCamel, et le distributeur les résoudra
  25. de la même manière. Par exemple, "notation-camel" deviendra "notationCamelAction" dans
  26. le distributeur, tandis que "notationCamel" deviendra "notationcamelAction" ;
  27. cependant, à cause de l'insensibilité à la casse de <acronym>PHP</acronym>, dans les deux cas cela
  28. exécutera la même méthode.
  29. </para>
  30. <para>
  31. Ceci pose des problèmes avec le <code>ViewRenderer</code> lors de la résolution
  32. des scripts de vue. La manière canonique et documentée est que tous les séparateurs de
  33. mot sont convertis en tirets, et les mots en minuscules. Ceci crée un lien sémantique
  34. entre les actions et les scripts de vue, et la normalisation s'assure que les scripts
  35. peuvent être trouvés. Cependant, si l'action "notationCamel" est appelée et est
  36. résolue, le séparateur de mot n'est pas pour autant présent, et le
  37. <code>ViewRenderer</code> tente de résoudre un emplacement différent -
  38. "notationcamel.phtml" au lieu de "notation-camel.phtml".
  39. </para>
  40. <para>
  41. Quelques développeurs se sont fondés sur ce "dispositif", qui n'a jamais été
  42. prévu. Plusieurs changements de l'arbre 1.5.0, cependant, l'ont fait de sorte que le
  43. <code>ViewRenderer</code> ne résout plus ces chemins&#160;; le lien sémantique est
  44. maintenant imposé. A partir de maintenant, le distributeur impose la sensibilité à la
  45. casse dans les noms d'action. Ceci veut dire que la référence vers vos actions dans
  46. l'URL en utilisant la notationCamel ne résoudra plus les mêmes méthodes qu'en utilisant
  47. les séparateurs de mots (par ex., "notation-camel"). Ceci entraîne qu'à partir de
  48. maintenant le <code>ViewRenderer</code> honorera seulement les actions en
  49. "mots-séparés" lors de la résolution des scripts de vue.
  50. </para>
  51. <para>
  52. Si vous constatez que vous comptiez sur ce "dispositif", vous avez plusieurs
  53. options&#160;:
  54. </para>
  55. <itemizedlist>
  56. <listitem>
  57. <para>
  58. Meilleure option : renommez vos scripts de vue. Pour&#160;: compatibilité
  59. ascendante. Contre&#160;: si vous avez beaucoup de scripts de vue basés sur
  60. l'ancien, comportement fortuit, vous aurez beaucoup de renommage à
  61. faire.
  62. </para>
  63. </listitem>
  64. <listitem>
  65. <para>
  66. Seconde meilleure option&#160;: le <code>ViewRenderer</code> délégue
  67. maintenant la résolution des scripts de vue à
  68. <classname>Zend_Filter_Inflector</classname> ; vous pouvez modifier les règles
  69. de l'inflecteur pour ne plus séparer les mots d'une action avec un tiret&#160;:
  70. </para>
  71. <programlisting language="php"><![CDATA[
  72. $viewRenderer =
  73. Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
  74. $inflector = $viewRenderer->getInflector();
  75. $inflector->setFilterRule(':action', array(
  76. new Zend_Filter_PregReplace(
  77. '#[^a-z0-9' . preg_quote(DIRECTORY_SEPARATOR, '#') . ']+#i',
  78. ''
  79. ),
  80. 'StringToLower'
  81. ));
  82. ]]></programlisting>
  83. <para>
  84. Le code ci-dessus modifiera l'inflecteur pour ne plus séparer les mots
  85. avec un tiret&#160;; vous pouvez aussi vouloir supprimer le filtre
  86. <code>StringToLower</code> si vous <emphasis>voulez</emphasis> que vos scripts
  87. de vues utilisent aussi la notationCamel.
  88. </para>
  89. <para>
  90. Si le renommage de vos scripts de vue est trop fastidieux ou nécessite
  91. trop de temps, ceci est la meilleure option avant de trouver le temps de le
  92. faire.
  93. </para>
  94. </listitem>
  95. <listitem>
  96. <para>
  97. Option la moins souhaitable&#160;: vous pouvez forcer le distributeur à
  98. distribuer les noms d'action écrits en notationCamel avec un nouveau drapeau du
  99. contrôleur frontal, <code>useCaseSensitiveActions</code>&#160;:
  100. </para>
  101. <programlisting language="php"><![CDATA[
  102. $front->setParam('useCaseSensitiveActions', true);
  103. ]]></programlisting>
  104. <para>
  105. Ceci vous permettra d'utiliser la notationCamel dans l'URL et de toujours
  106. faire résoudre la même action que si vous utilisez les séparateurs de mots.
  107. Cependant, ceci signifiera que les problèmes décrits ci-dessus interviendront
  108. tôt ou tard ; vous devrez probablement utiliser la deuxième option ci-dessus en
  109. plus de celle-ci pour que tout fonctionne correctement.
  110. </para>
  111. <para>
  112. Notez, de plus, que l'utilisation de ce drapeau déclenchera une
  113. <code>notice</code> indiquant que cette utilisation est dépréciée.
  114. </para>
  115. </listitem>
  116. </itemizedlist>
  117. </sect2>
  118. </sect1>