ZF2 création d’un ViewHelper

Les aides de vue ViewHelper dans ZF2

une aide de vue (ViewHelper) sert à factoriser du code que l’on utilise fréquemment dans nos vues/layouts.

c’est est une simple classe que l’on dérive de la classe Zend\View\Helper\AbstractHelper et dans laquelle on fournira une méthode __invoke() qui retournera un résultat

Cette manière de créer une aide de vue est la plus simple car en fait une aide de vue doit implémenter l’interface “Zend\View\Helper” (et donc définir les méthodes getView() et setView() ). La classe Zend\View\Helper\AbstractHelper implémente cette interface.

P.I. : la méthode magique __invoke() a été introduite dans php5.3 et permet d’appeler une classe comme si c’est une fonction (elle remplace la méthode direct() de ZF1 qui est un hack pour simuler ce comportement). ceci nous permettra d’appeler notre aide de vue de la manière $this->monViewHelper() au lieu de $this->monViewHelper->maMethode()

Prenons comme example le cas où on a besoins d’afficher un avatar dans plusieurs vues: (pour simplifier on se contente de retourner une chaine )  :

On prévoie que notre ViewHelper prenne des paramètres. on pourra par la suite demander à récupérer des infos dans une base de donnée. (on se content de faire simple pour l’instant).

la définition de notre classe se trouve dans le dossier MyModule/src/MyModule/View/Helper de notre module  ‘MyModule’ . il nous faut renseigner son existence dans la configuration du ViewHelperManager:

Directement dans la config de notre module :

ou pour faire simple, dans le fichier module.config.php du module :

une foi renseigné dans la config du ViewHelperManager, on pourra utiliser notre aide de vue partout dans les vues/layouts de notre application.

on pourra appeler notre aide de vue comme ceci :

ou avec des paramètres :

Voila !! c’est aussi simple que cela !!!
mais ne ne s’arrête pas là ! on voudrai faire plus que çà

Injection de dépendances dans un ViewHelper :

il peut arriver qu’on ai besoin de créer des widget que l’on appelera dans nos vues/layout et qui feront des traitement plus complexe que d’utiliser des fonction natives de php (calendrier, méteo, derniers articles, etc…) . Il devient nécessaire d’utiliser d’autres composants de notre application à l’intérieur de notre viewHelper (modèles, webservices, Cache, DBadapter, etc…). pour ceci nous injecterons les dépendances dans notre ViewHelper, (via un/des setter(s) ou via le constructeur) :

reprenons notre classe et ajoutons y un/des moyen(s) d’injecter nos dépendances :
(pour l’exemple on utilise les deux méthodes, et on suppose que vous avez un modèle fonctionnel via lequel on peut récupérer le nom d’un fichier image à partir d’un profile utilisateur en fonction de son identifiant )

on informe le ViewHelperManager de sa présence,
via une fabrique(anonyme), qui permettra de retourner le ViewHelper instancié avec ses dépendances :

ou

Rappelez-vous que les fabriques reçoivent un ServiceManager en paramètre, et que les ViewHelper, PluginManager, ControllerManager ont leur propre service manager et que pour récupérer les ServiceManager principal on utilise getServiceLocator() à partir de leur SM. ce mécanisme est très puissant et nous permet de récupérer beaucoup d’objets/service de notre application via le ServiceManager.

voyons une autre manière d’avoir accès au service manager dans une aide de vue :

si on veut juste un service manager dans notre aide vue (sans y injecter de dépendance pendant l’instanciation),on peut faire implémenter par notre ViewHelper l’interface ServiceLocatorAwareInterface ( le
ViewHelperManager est en soi un ServiceManager dont le but est de fournir des ViewHelpers). on ajoute ainsi à notre classe les méthodes setServicee
Locator() et getServiceLocator() imposés par l’interface pour que le ViewHelperMAnager injectera une référence de lui-même dans l’aide de vue :

notre config ressemblera à :

Pour finir, n’oubliez pas de vous assurer que vos dépendances sont connues du service manager, que l’autoloading est correctement configuré et que vous avez correctement spécifié les namespaces (sans oublier les directives use).

Did you like this? Share it:

One Response to ZF2 création d’un ViewHelper

  1. Nauru says:

    As a Newbie, I am constantly browsing online for articles that can aid me. Thank you

Open Close