Créer une extension Twig

Logo TwigIl peut arriver d’avoir besoin d’une fonctionnalité qui n’est pas prévu par le système de template Twig.
Heureusement, créer une extension Twig au sein d’un projet Symfony2 est très simple.
Dans l’exemple ci-dessous, nous allons créer une extension qui nous renverra la classe d’un objet.

Tout d’abord il faut créer l’extension, par exemple dans le dossier AppBundle/Twig/

namespace AppBundle\Twig;

class ClassExtension extends \Twig_Extension
{
    /**
     * @return array
     */
    public function getFunctions()
    {
        return array(
            'class' => new \Twig_SimpleFunction('class', array($this, 'getClass'))
        );
    }

    /**
     * @param object $object
     * @return string
     */
    public function getClass($object)
    {
        return (new \ReflectionClass($object))->getShortName();
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'class_twig_extension';
    }
}

Il faut ensuite créer le service dans le fichier app/config/services.yml

services:
    class_twig_extension:
        class: AppBundle\Twig\ClassExtension
        public: false
        tags:
            - { name: twig.extension }

On peut désormais utiliser notre fonction « class » dans nos templates :

{% if class(monObjet) == 'Utilisateur' %}
    {{ monObjet.nom }}
{% endif %}

Il est possible de créer une extension « filtre » plutôt que « fonction », pour pouvoir l’utiliser de cette façon :

{{ monObjet|class }}

La documentation présente sur le site de Symfony utilise ce cas : http://symfony.com/doc/current/cookbook/templating/twig_extension.html

Share Button

Laisser un commentaire.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.