Supprimer $this dans les scripts de Zend_View

Supprimer $this dans les scripts de Zend_View

Avec le composant de vue Zend_View, il faut sans arret préfixé les variables par le pointeur $this. Pourtant, il existe une solution pour accéder directement variable sans passer par ce pointeur.

Pour ceux qui ne sont pas familier avec les templates de Zend_View, pour afficher la varible $titre qui a été passé en paramètre au template, il faut écrire un code du genre :

<?php 
    <h1><?= $this->title ?></h1> 

PHP dispose de la fonction extract dans le rôle est d’importer dans la table des symboles le tableau de variables passer en paramètres. En combinant avec la méthode getVars de la classe Zend_View. On peut donc “simplifier” notre code en écrivant :

<?php 
extract($this->getVars(), EXTR\_SKIP); 
<h1><?= $this->title ?></h1> 

Le flag EXTR_SKIP permet de ne pas écraser les variables globales déja existante. Si vous n’utilisez pas de variable globale, cette précaution est normalement inutile. En effet, dans un script de vue (tous les .phtml pour faire simple) la seule variable disponible est $this. Dans le cas, où vous utilisez des variables globales, je ne peut que vous déconseiller cette méthode.

On peut rajouter cette ligne au début de chaque fichier de template, mais ce n’est pas la manière la plus élégante de procédé. Une solution un peu plus propre est d’étendre la classe Zend_View par héritage :

<?php 
class Sfx_View extends Zend_View { 
    protected function _run() { 
        extract($this->getVars(), EXTR_SKIP); 
        if ($this->_useViewStream && $this->useStreamWrapper()) { 
            include 'zend.view://' . func_get_arg(0); 
        } 
        else { 
            include func_get_arg(0); 
        } 
    } 
} 

Malheuresement, on ne peut pas appeler directement la méthode _run de la classe parent dans la mesure où l’on changerait de contexte. Il faut donc faire un copier / coller de la méthode run de la classe parente dans la méthode run de la classe fille. Cette solution fonctionne mais il faut faire attention au monté de version qui peuvent poser problème.

Il ne reste plus qu’à remplacer l’instance de Zend_View par une instance de notre classe Sfx_View. Il suffit de mettre dans la méthode initView de l’initializer ces quelques lignes de codes et le tour est joué.

<?php
$view = new Sfx_View(); 
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); 
$viewRenderer->setView($view); 

L’avantage de cette méthode est qu’elle ne supprime pas les variables référencés par la variable $this. Il y a compatibilité avec les templates existant qui n’utilisent pas cette astuce.

Bon, si vous n’êtes pas convaincu, il vous reste la solution de faire un raccourcis clavier dans votre éditeur de texte pour écrire automatiquement “$this->” ou carrément “<?= $this->“. A vous de voir quelle solution vous semble la plus adapté à votre projet.

comments powered by Disqus

Voir aussi

Layout 3 colonnes en XHTML / CSS

Layout 3 colonnes en XHTML / CSS

Comment faire un layout en 3 colonnes avec XHTML / CSS ? Voila une des question qui m’a souvent été posé lors d’entretien …

Ouverture des liens dans une nouvelle fenêtre

Ouverture des liens dans une nouvelle fenêtre

La propriété HTML target=”_blank” apparu dans la version 4.0 du langage HTML et enlevée dans la 4.01, quelques mois plus tard. Elle permet …

Faut t’il ré-implémenter les fonctionnalités des navigateurs dans une page Web ?

Faut t’il ré-implémenter les fonctionnalités des navigateurs dans une page Web ?

Voilà une question bien curieuse, tout le monde répond évidemment non, et pourtant c’est la direction qu’est en train de prendre le Web …

HTML 5 : Suppresion de la balise acronym

HTML 5 : Suppresion de la balise acronym

Vu la confusion qui regnais entre les balises acronym et abbr dans le HTML et le XHTML. Les derniers brouillons sur le HTML 5 ne font l’état que …

A la une
  • Rencontre du numérique 2019 - Nîmes
  • référencement naturel d'un hôtel
  • Développeur eZ Platform
  • Tech lead Symfony
  • Expert Qualité Web

Copyright - Sylvain FIX

2009 - 2019