| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <!-- EN-Revision: 13826 -->
- <sect1 id="zend.view.introduction">
- <title>Introduction</title>
- <para><classname>Zend_View</classname> est une classe qui permet de travailler avec la partie "Vue" du motif de conception
- 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
- fournie un système d'aide, de filtres d'affichage, et d'échappement de variables.</para>
- <para><classname>Zend_View</classname> est un système de template agnostique ; vous pouvez utiliser PHP comme langage de
- template, ou créer des instances d'autres systèmes de templates, et les manipuler à travers les scripts de
- vue.</para>
- <para>L'utilisation de <classname>Zend_View</classname> se déroule en deux étapes principales : 1. Votre script de contrôleur
- crée une instance de <classname>Zend_View</classname> et assigne des variables à cette instance. 2. Le contrôleur dit à
- <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
- vue, qui va générer l'affichage.</para>
- <sect2 id="zend.view.introduction.controller">
- <title>Script du Contrôleur</title>
- <para>Comme exemple simple, imaginons que votre contrôleur aie une liste de données sur des livres qu'il veut
- afficher en passant par une vue. Le contrôleur pourrait alors ressembler à ceci :</para>
- <programlisting role="php"><![CDATA[
- // utilise un modèle pour obtenir les données sur les livres :
- // auteurs et titres
- $data = array(
- array(
- 'auteur' => 'Hernando de Soto',
- 'titre' => 'Le mystère du capitalisme'
- ),
- array(
- 'auteur' => 'Henry Hazlitt',
- 'titre' => 'Les sciences économique en un cours'
- ),
- array(
- 'auteur' => 'Milton Friedman',
- 'titre' => 'Libre de choisir'
- )
- );
- // assigniation des données du livre à une instance Zend_View
- Zend_Loader::loadClass('Zend_View');
- $view = new Zend_View();
- $view->books = $data;
- // et appel du script de rendu d'affichage appelé "booklist.php"
- echo $view->render('booklist.php');
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.view.introduction.view">
- <title>Script de vue</title>
- <para>Maintenant, nous avons besoin d'associer le script de vue "<filename>booklist.php</filename>". C'est un
- script PHP comme les autres, à une exception près : il s'exécute dans la portée de l'instance
- <classname>Zend_View</classname>, ce qui veut dire que les référence à <code>$this</code> pointent vers les attributs et
- les méthodes de <classname>Zend_View</classname>. (Les variables assignées à l'instance par le contrôleur sont des
- propriétés publiques de l'instance <classname>Zend_View</classname>). Ainsi un script de vue de base pourrait ressembler à
- ceci :</para>
- <programlisting role="php"><![CDATA[
- <?php if ($this->books): ?>
- <!-- La table des livres -->
- <table>
- <tr>
- <th>Auteur</th>
- <th>Titre</th>
- </tr>
- <?php foreach ($this->books as $key => $val): ?>
- <tr>
- <td><?php echo $this->escape($val['auteur']) ?></td>
- <td><?php echo $this->escape($val['titre']) ?></td>
- </tr>
- <?php endforeach; ?>
- </table>
- <?php else: ?>
- <p>Aucun livre à afficher</p>
- <?php endif; ?>
- ]]></programlisting>
- <para>Notez l'utilisation de la méthode <code>escape</code> pour échapper les variables à afficher.</para>
- </sect2>
- <sect2 id="zend.view.introduction.options">
- <title>Options</title>
- <para><classname>Zend_View</classname> possède plusieurs options qui peuvent être réglées pour changer le comportement de
- vos scripts de vues.</para>
- <itemizedlist>
- <listitem>
- <para><code>basePath</code> : indique le chemin de base où peuvent être trouvés les dossiers de scripts,
- d'aides et de filtres. Il considère une structure de dossiers de ce type :</para>
- <programlisting role="php"><![CDATA[
- chemin/vers/
- helpers/
- filters/
- scripts/
- ]]></programlisting>
- <para>Ceci peut être paramétré via les méthodes <code>setBasePath()</code>, <code>addBasePath()</code>,
- ou l'option <code>basePath</code> du constructeur.</para>
- </listitem>
- <listitem>
- <para><code>encoding</code> : indique l'encodage de caractère à utiliser avec
- <code>htmlentities()</code>, <code>htmlspecialchars()</code>, et tout autre opération. La valeur par
- défaut est ISO-8859-1 (latin1). Il peut être paramétré avec la méthode <code>setEncoding()</code> ou
- l'option <code>encoding</code> du constructeur.</para>
- </listitem>
- <listitem>
- <para><code>escape</code> : indique le callback que doit utiliser <code>escape()</code>. Ceci pet être
- paramétré avec la méthode <code>setEscape()</code> ou l'option <code>escape</code> du
- constructeur.</para>
- </listitem>
- <listitem>
- <para><code>filter</code> : indique un filtre à utiliser avant d'effectuer le rendu d'un script de vue.
- Ceci peut être paramétré avec les méthodes <code>setFilter()</code>, <code>addFilter()</code>, ou
- l'option <code>filter</code> du constructeur.</para>
- </listitem>
- <listitem>
- <para><code>strictVars</code> : force <classname>Zend_View</classname> à émettre des "notices" et des "warnings"
- quand des variables non initialisées sont lues. Ceci peut être activé en appelant
- <code>strictVars(true)</code> ou en passant l'option <code>strictVars</code> au constructeur.</para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.view.introduction.shortTags">
- <title>Balises courtes dans les scripts de vue</title>
- <para>Dans nos exemples et notre documentation, nous utilisons les balises courtes PHP : <code><?</code> and
- <code><?=</code>. De plus, nous utilisons parfois <ulink
- url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">la syntaxe alternative des
- structures de contrôle</ulink>. Ce sont des éléments pratiques à utiliser lors de la rédaction de vos scripts de
- vue, car elles rendent les constructions plus laconiques, et maintiennent les instructions sur des lignes
- uniques.</para>
- <para>Ceci étant dit, de nombreux développeurs préfère utiliser la forme complète pour des questions de
- validation ou de portabilité. Par exemple, <code>short_open_tag</code> est désactivé dans le
- <firstterm>php.ini.recommended</firstterm>, et si vous avez du XML dans vos scripts de vue, alors les balises
- courtes entraîneront un échec de validation du modèle.</para>
- <para>De plus, si vous utilisez les balises courtes avec un réglage du paramètre à "off", alors les scripts de
- vue vont soit entraîner des erreurs, soit simplement afficher le code à l'utilisateur.</para>
- <para>Pour ce dernier cas, quand vous souhaitez utiliser les balises courtes mais qu'elles sont désactivées,
- vous avez deux options :</para>
- <itemizedlist>
- <listitem>
- <para>Activer les dans votre fichier <code>.htaccess</code> :</para>
- <programlisting role="apache"><![CDATA[
- php_value "short_open_tag" "on"
- ]]></programlisting>
- <para>Ceci est seulement possible si vous êtes autorisé à créer et utiliser les fichiers
- <code>.htaccess</code>. Cette directive peut aussi être ajoutée à votre fichier
- <code>httpd.conf</code>.</para>
- </listitem>
- <listitem>
- <para>Activer une enveloppe de flux ("stream wrapper") optionnelle pour convertir les balises courtes en
- balises longues à la volée :</para>
- <programlisting role="php"><![CDATA[
- $view->setUseStreamWrapper(true);
- ]]></programlisting>
- <para>Ceci enregistre <classname>Zend_View_Stream</classname> en tant que enveloppe de flux pour les scripts de
- vue, et permet de s'assurer que votre code continue à fonctionner comme si les balises courtes étaient
- activées.</para>
- </listitem>
- </itemizedlist>
- <note>
- <title>Les enveloppes de flux de vue dégradent les performances</title>
- <para>L'utilisation d'enveloppe de flux <emphasis>dégradera</emphasis> les performances de votre
- application, bien que les tests de performance réels sont indisponibles pour quantifier le niveau de
- dégradation. Nous recommandons donc soit d'activer les balises courtes, soit de convertir vos scripts pour
- utiliser la forme longue, ou d'avoir une bonne stratégie de mise en cache partielle ou totale du contenu de
- vos pages.</para>
- </note>
- </sect2>
- <sect2 id="zend.view.introduction.accessors">
- <title>Accesseurs utiles</title>
- <para>Typiquement, vous ne devriez seulement avoir besoin d'appeler les méthodes <code>assign()</code>,
- <code>render()</code>, ou une des méthodes pour le paramétrage/l'ajout de chemins de filtre, d'aide et de script
- de vues. Cependant, si vous souhaitez étendre <classname>Zend_View</classname> vous-même, ou avez besoin d'accéder à
- quelques unes de ces méthodes internes, un certain nombre d'accesseurs existent :</para>
- <itemizedlist>
- <listitem>
- <para><code>getVars()</code> retournera toutes les variables assignées.</para>
- </listitem>
- <listitem>
- <para><code>clearVars()</code> effacera toutes les variables assignées ; utile si vous souhaitez
- ré-utiliser un objet de vue, ou contrôler les variables qui sont disponibles.</para>
- </listitem>
- <listitem>
- <para><code>getScriptPath($script)</code> récupérera le chemin résolu vers un script donné..</para>
- </listitem>
- <listitem>
- <para><code>getScriptPaths()</code> récupérera tous les chemins vers les scripts de vues
- enregistrés.</para>
- </listitem>
- <listitem>
- <para><code>getHelperPath($helper)</code> récupérera le chemin résolu vers une classe d'aide
- nommée.</para>
- </listitem>
- <listitem>
- <para><code>getHelperPaths()</code> récupérera tous les chemins vers les aides enregistrés.</para>
- </listitem>
- <listitem>
- <para><code>getFilterPath($filter)</code> récupérera le chemin résolu vers une classe de filtre
- nommée.</para>
- </listitem>
- <listitem>
- <para><code>getFilterPaths()</code> récupérera tous les chemins vers les filtres enregistrés.</para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
|