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).

Commentaires

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.

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) ?

Ajouter un commentaire