Zend_View-Introduction.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <!-- EN-Revision: 13826 -->
  2. <sect1 id="zend.view.introduction">
  3. <title>Introduction</title>
  4. <para><classname>Zend_View</classname> est une classe qui permet de travailler avec la partie "Vue" du motif de conception
  5. Modèle-Vue-Contrôleur. Elle existe pour aider à garder la vue séparée du modèle et des scripts du contrôleur. Elle
  6. fournie un système d'aide, de filtres d'affichage, et d'échappement de variables.</para>
  7. <para><classname>Zend_View</classname> est un système de template agnostique ; vous pouvez utiliser PHP comme langage de
  8. template, ou créer des instances d'autres systèmes de templates, et les manipuler à travers les scripts de
  9. vue.</para>
  10. <para>L'utilisation de <classname>Zend_View</classname> se déroule en deux étapes principales : 1. Votre script de contrôleur
  11. crée une instance de <classname>Zend_View</classname> et assigne des variables à cette instance. 2. Le contrôleur dit à
  12. <classname>Zend_View</classname> d'effectuer le rendu d'une vue particulière, et de ce fait va donner le contrôle au script de
  13. vue, qui va générer l'affichage.</para>
  14. <sect2 id="zend.view.introduction.controller">
  15. <title>Script du Contrôleur</title>
  16. <para>Comme exemple simple, imaginons que votre contrôleur aie une liste de données sur des livres qu'il veut
  17. afficher en passant par une vue. Le contrôleur pourrait alors ressembler à ceci :</para>
  18. <programlisting role="php"><![CDATA[
  19. // utilise un modèle pour obtenir les données sur les livres :
  20. // auteurs et titres
  21. $data = array(
  22. array(
  23. 'auteur' => 'Hernando de Soto',
  24. 'titre' => 'Le mystère du capitalisme'
  25. ),
  26. array(
  27. 'auteur' => 'Henry Hazlitt',
  28. 'titre' => 'Les sciences économique en un cours'
  29. ),
  30. array(
  31. 'auteur' => 'Milton Friedman',
  32. 'titre' => 'Libre de choisir'
  33. )
  34. );
  35. // assigniation des données du livre à une instance Zend_View
  36. Zend_Loader::loadClass('Zend_View');
  37. $view = new Zend_View();
  38. $view->books = $data;
  39. // et appel du script de rendu d'affichage appelé "booklist.php"
  40. echo $view->render('booklist.php');
  41. ]]></programlisting>
  42. </sect2>
  43. <sect2 id="zend.view.introduction.view">
  44. <title>Script de vue</title>
  45. <para>Maintenant, nous avons besoin d'associer le script de vue "<filename>booklist.php</filename>". C'est un
  46. script PHP comme les autres, à une exception près : il s'exécute dans la portée de l'instance
  47. <classname>Zend_View</classname>, ce qui veut dire que les référence à <code>$this</code> pointent vers les attributs et
  48. les méthodes de <classname>Zend_View</classname>. (Les variables assignées à l'instance par le contrôleur sont des
  49. propriétés publiques de l'instance <classname>Zend_View</classname>). Ainsi un script de vue de base pourrait ressembler à
  50. ceci :</para>
  51. <programlisting role="php"><![CDATA[
  52. <?php if ($this->books): ?>
  53. <!-- La table des livres -->
  54. <table>
  55. <tr>
  56. <th>Auteur</th>
  57. <th>Titre</th>
  58. </tr>
  59. <?php foreach ($this->books as $key => $val): ?>
  60. <tr>
  61. <td><?php echo $this->escape($val['auteur']) ?></td>
  62. <td><?php echo $this->escape($val['titre']) ?></td>
  63. </tr>
  64. <?php endforeach; ?>
  65. </table>
  66. <?php else: ?>
  67. <p>Aucun livre à afficher</p>
  68. <?php endif; ?>
  69. ]]></programlisting>
  70. <para>Notez l'utilisation de la méthode <code>escape</code> pour échapper les variables à afficher.</para>
  71. </sect2>
  72. <sect2 id="zend.view.introduction.options">
  73. <title>Options</title>
  74. <para><classname>Zend_View</classname> possède plusieurs options qui peuvent être réglées pour changer le comportement de
  75. vos scripts de vues.</para>
  76. <itemizedlist>
  77. <listitem>
  78. <para><code>basePath</code> : indique le chemin de base où peuvent être trouvés les dossiers de scripts,
  79. d'aides et de filtres. Il considère une structure de dossiers de ce type :</para>
  80. <programlisting role="php"><![CDATA[
  81. chemin/vers/
  82. helpers/
  83. filters/
  84. scripts/
  85. ]]></programlisting>
  86. <para>Ceci peut être paramétré via les méthodes <code>setBasePath()</code>, <code>addBasePath()</code>,
  87. ou l'option <code>basePath</code> du constructeur.</para>
  88. </listitem>
  89. <listitem>
  90. <para><code>encoding</code> : indique l'encodage de caractère à utiliser avec
  91. <code>htmlentities()</code>, <code>htmlspecialchars()</code>, et tout autre opération. La valeur par
  92. défaut est ISO-8859-1 (latin1). Il peut être paramétré avec la méthode <code>setEncoding()</code> ou
  93. l'option <code>encoding</code> du constructeur.</para>
  94. </listitem>
  95. <listitem>
  96. <para><code>escape</code> : indique le callback que doit utiliser <code>escape()</code>. Ceci pet être
  97. paramétré avec la méthode <code>setEscape()</code> ou l'option <code>escape</code> du
  98. constructeur.</para>
  99. </listitem>
  100. <listitem>
  101. <para><code>filter</code> : indique un filtre à utiliser avant d'effectuer le rendu d'un script de vue.
  102. Ceci peut être paramétré avec les méthodes <code>setFilter()</code>, <code>addFilter()</code>, ou
  103. l'option <code>filter</code> du constructeur.</para>
  104. </listitem>
  105. <listitem>
  106. <para><code>strictVars</code> : force <classname>Zend_View</classname> à émettre des "notices" et des "warnings"
  107. quand des variables non initialisées sont lues. Ceci peut être activé en appelant
  108. <code>strictVars(true)</code> ou en passant l'option <code>strictVars</code> au constructeur.</para>
  109. </listitem>
  110. </itemizedlist>
  111. </sect2>
  112. <sect2 id="zend.view.introduction.shortTags">
  113. <title>Balises courtes dans les scripts de vue</title>
  114. <para>Dans nos exemples et notre documentation, nous utilisons les balises courtes PHP : <code>&lt;?</code> and
  115. <code>&lt;?=</code>. De plus, nous utilisons parfois <ulink
  116. url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">la syntaxe alternative des
  117. structures de contrôle</ulink>. Ce sont des éléments pratiques à utiliser lors de la rédaction de vos scripts de
  118. vue, car elles rendent les constructions plus laconiques, et maintiennent les instructions sur des lignes
  119. uniques.</para>
  120. <para>Ceci étant dit, de nombreux développeurs préfère utiliser la forme complète pour des questions de
  121. validation ou de portabilité. Par exemple, <code>short_open_tag</code> est désactivé dans le
  122. <firstterm>php.ini.recommended</firstterm>, et si vous avez du XML dans vos scripts de vue, alors les balises
  123. courtes entraîneront un échec de validation du modèle.</para>
  124. <para>De plus, si vous utilisez les balises courtes avec un réglage du paramètre à "off", alors les scripts de
  125. vue vont soit entraîner des erreurs, soit simplement afficher le code à l'utilisateur.</para>
  126. <para>Pour ce dernier cas, quand vous souhaitez utiliser les balises courtes mais qu'elles sont désactivées,
  127. vous avez deux options :</para>
  128. <itemizedlist>
  129. <listitem>
  130. <para>Activer les dans votre fichier <code>.htaccess</code> :</para>
  131. <programlisting role="apache"><![CDATA[
  132. php_value "short_open_tag" "on"
  133. ]]></programlisting>
  134. <para>Ceci est seulement possible si vous êtes autorisé à créer et utiliser les fichiers
  135. <code>.htaccess</code>. Cette directive peut aussi être ajoutée à votre fichier
  136. <code>httpd.conf</code>.</para>
  137. </listitem>
  138. <listitem>
  139. <para>Activer une enveloppe de flux ("stream wrapper") optionnelle pour convertir les balises courtes en
  140. balises longues à la volée :</para>
  141. <programlisting role="php"><![CDATA[
  142. $view->setUseStreamWrapper(true);
  143. ]]></programlisting>
  144. <para>Ceci enregistre <classname>Zend_View_Stream</classname> en tant que enveloppe de flux pour les scripts de
  145. vue, et permet de s'assurer que votre code continue à fonctionner comme si les balises courtes étaient
  146. activées.</para>
  147. </listitem>
  148. </itemizedlist>
  149. <note>
  150. <title>Les enveloppes de flux de vue dégradent les performances</title>
  151. <para>L'utilisation d'enveloppe de flux <emphasis>dégradera</emphasis> les performances de votre
  152. application, bien que les tests de performance réels sont indisponibles pour quantifier le niveau de
  153. dégradation. Nous recommandons donc soit d'activer les balises courtes, soit de convertir vos scripts pour
  154. utiliser la forme longue, ou d'avoir une bonne stratégie de mise en cache partielle ou totale du contenu de
  155. vos pages.</para>
  156. </note>
  157. </sect2>
  158. <sect2 id="zend.view.introduction.accessors">
  159. <title>Accesseurs utiles</title>
  160. <para>Typiquement, vous ne devriez seulement avoir besoin d'appeler les méthodes <code>assign()</code>,
  161. <code>render()</code>, ou une des méthodes pour le paramétrage/l'ajout de chemins de filtre, d'aide et de script
  162. de vues. Cependant, si vous souhaitez étendre <classname>Zend_View</classname> vous-même, ou avez besoin d'accéder à
  163. quelques unes de ces méthodes internes, un certain nombre d'accesseurs existent :</para>
  164. <itemizedlist>
  165. <listitem>
  166. <para><code>getVars()</code> retournera toutes les variables assignées.</para>
  167. </listitem>
  168. <listitem>
  169. <para><code>clearVars()</code> effacera toutes les variables assignées ; utile si vous souhaitez
  170. ré-utiliser un objet de vue, ou contrôler les variables qui sont disponibles.</para>
  171. </listitem>
  172. <listitem>
  173. <para><code>getScriptPath($script)</code> récupérera le chemin résolu vers un script donné..</para>
  174. </listitem>
  175. <listitem>
  176. <para><code>getScriptPaths()</code> récupérera tous les chemins vers les scripts de vues
  177. enregistrés.</para>
  178. </listitem>
  179. <listitem>
  180. <para><code>getHelperPath($helper)</code> récupérera le chemin résolu vers une classe d'aide
  181. nommée.</para>
  182. </listitem>
  183. <listitem>
  184. <para><code>getHelperPaths()</code> récupérera tous les chemins vers les aides enregistrés.</para>
  185. </listitem>
  186. <listitem>
  187. <para><code>getFilterPath($filter)</code> récupérera le chemin résolu vers une classe de filtre
  188. nommée.</para>
  189. </listitem>
  190. <listitem>
  191. <para><code>getFilterPaths()</code> récupérera tous les chemins vers les filtres enregistrés.</para>
  192. </listitem>
  193. </itemizedlist>
  194. </sect2>
  195. </sect1>