Zend_View-Introduction.xml 14 KB

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