Zend Framework : les aides de vue

Logo Zend Framework

Quand j'ai commencé à utiliser le Zend Framework, je trouvais qu'utiliser des classes pour implémenter les aides de vue représentait une surcharge inutile. Une simple fonction ferait tout aussi bien l'affaire. Le seul avantage que cette approche avait à mes yeux, c'est qu'on n'avait pas à passer la vue à chaque appel de la fonction. Mais comme on doit quant même préfixer l'appel de la méthode par <?php$this?>, cela revenait à peu près au même.

<?php
// Procédural
formText($this'name''Albert');

// Objet
$this->formText('name''Albert');
?>

Maintenant, j'ai mieux compris les avantages que procure cette disposition. On peut évidemment plus facilement écrire des aides complexes comme Cycle par exemple. On peut également effectuer des traitements d'initialisation sur la vue. En effet, l'objet associé à l'aide de vue et instancié une seule fois puis réutilisé à chaque appel. Si par exemple on a besoin d'ajouter une classe CSS à la page, on peut le faire en surchargeant la méthode setView de notre aide de vue personnalisée :

<?php
class Wiip_View_Helper_Warning extends Zend_View_Helper_HtmlElement
{
    public function 
setView(Zend_View_Interface $view)
    {
        
parent::setView($view);
        
$view->headStyle('.warning { background-color: red; color: white; }');
        return 
$this;
    }

    public function 
warning($text)
    {
        return 
'<div class="warning">' $this->view->escape($text) . '</div>';
    }
}
?>

Au premier appel de l'aide de vue warning, le style warning sera ajouté à l'entête de la page et pourra être réutilisé pour les appels suivants.

On peut aussi utiliser l'héritage pour factoriser le code. Si vous dérivez votre aide de vue de la classe Zend_View_Helper_HtmlElement, vous hériterez de quelques méthodes bien utiles :

  • getClosingBracket : renvoie le marqueur de fermeture pour les balises sans contenu comme IMG ou BR (en XHTML, cette méthode renverra />).
  • isXhtml : renvoie true si la page utilise un doctype XHTML.
  • _htmlAttribs : converti un tableau associatif en une chaîne d'attributs.
  • _normalizeId : remplace les crochets trouvés dans une chaîne par un tiret

Finalement, on peut ajouter des méthodes statique à notre aide de vue pour permettre sa configuration (comme dans Zend_View_Helper_PaginationControl).

Portrait de ANONYMOUS

Bonjour, Je tiens à préciser

Bonjour,

Je tiens à préciser que ce code ne fonctionne pas en l'état (il manque function devant la méthode warning).
De plus cela ne fonctionne pas tout court avec la version 1.10.2 tout du moins.

J'aurais voulu savoir si quelqu'un aurait une idée comment faire, car cela m'intéresse grandement.

Portrait de Maxence

Effectivement, il manque le

Effectivement, il manque le mot clé function. J'ai corrigé le code incriminé.

Je suis étonné que ce code ne fonctionne pas sur la 1.10.2. Est-ce que tu a placé un appel à echo $this->headStyle(); dans ta vue ou dans ta mise en page (layout) ?

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <php>.

Plus d'informations sur les options de formatage

CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.