| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <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 <acronym>PHP</acronym> 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 language="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 <acronym>PHP</acronym> 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 à
- <varname>$this</varname> 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 language="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 language="php"><![CDATA[
- chemin/vers/
- helpers/
- filters/
- scripts/
- ]]></programlisting>
- <para>
- Ceci peut être paramétré via les méthodes <methodname>setBasePath()</methodname>,
- <methodname>addBasePath()</methodname>, ou l'option <code>basePath</code> du
- constructeur.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>encoding</code> : indique l'encodage de caractère à utiliser avec
- <methodname>htmlentities()</methodname>, <methodname>htmlspecialchars()</methodname>, et tout autre
- opération. La valeur par défaut est UTF-8. Il peut être paramétré
- avec la méthode <methodname>setEncoding()</methodname> ou l'option <code>encoding</code> du
- constructeur.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>escape</code> : indique le callback que doit utiliser
- <methodname>escape()</methodname>. Ceci pet être paramétré avec la méthode
- <methodname>setEscape()</methodname> 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
- <methodname>setFilter()</methodname>, <methodname>addFilter()</methodname>, 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 <methodname>strictVars(true)</methodname> 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 longues <acronym>PHP</acronym> :
- <emphasis><?php</emphasis>. 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, maintiennent les instructions sur des lignes uniques et éliminent la chasse aux
- accolades à l'intérieur de l'HTML.
- </para>
- <para>
- Dans les versions précédentes, nous recommandions souvent l'utilisation des balises
- courtes (<emphasis><?</emphasis> et <emphasis><?=</emphasis>), car elles rendent
- les scripts de vues moins verbeux. Cependant, la valeur par défaut du fichier
- <filename>php.ini</filename> pour le réglage <constant>short_open_tag</constant> est
- désactivé par défaut en production ou en hébergement mutualisé ; rendant ainsi
- vos scripts peu portables. De plus, si vous modélisez du <acronym>XML</acronym> dans
- vos scripts, la présence des balises courtes entrainera l'échec de la validation.
- Enfin, si vous utilisez les balises courtes et que <constant>short_open_tag</constant>
- est désactivé, le script retournera soit des erreurs, soit votre code PHP à
- l'utilisateur.
- </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 <acronym>XML</acronym>
- 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>
- Si malgré ces avertissements, 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 language="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 language="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>
- <warning>
- <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>
- </warning>
- </sect2>
- <sect2 id="zend.view.introduction.accessors">
- <title>Accesseurs utiles</title>
- <para>
- Typiquement, vous ne devriez seulement avoir besoin d'appeler les méthodes
- <methodname>assign()</methodname>, <methodname>render()</methodname>, 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><methodname>getVars()</methodname> retournera toutes les variables assignées.</para>
- </listitem>
- <listitem>
- <para>
- <methodname>clearVars()</methodname> 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>
- <methodname>getScriptPath($script)</methodname> récupérera le chemin résolu vers un
- script donné..
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getScriptPaths()</methodname> récupérera tous les chemins vers les scripts
- de vues enregistrés.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getHelperPath($helper)</methodname> récupérera le chemin résolu vers une
- classe d'aide nommée.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getHelperPaths()</methodname> récupérera tous les chemins vers les aides
- enregistrés.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getFilterPath($filter)</methodname> récupérera le chemin résolu vers une
- classe de filtre nommée.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getFilterPaths()</methodname> récupérera tous les chemins vers les filtres
- enregistrés.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
|