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 :
Finalement, on peut ajouter des méthodes statique à notre aide de vue pour permettre sa configuration (comme dans Zend_View_Helper_PaginationControl).
Commentaires
ANONYMOUS (non vérifié)
ven, 05/03/2010 - 10:18
Permalink
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.
Maxence
mar, 16/03/2010 - 11:01
Permalink
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) ?
Ajouter un commentaire