< Retour

Créer et utiliser une fonction ou un filtre personnalisé dans Twig

Créer une fonction Twig personnalisée

L'objectif de cet article est de vous aider à créer une fonction qui sera utilisable dans un template Twig.

Pour cela il nous faut avant tout créer une extension de Twig. Dans celle-ci, nous aurons la liste des fonctions disponible pour les templates.

Twig Extension

Pour créer une extension de Twig, nous allons utiliser une commande disponible dans Symfony 5. La commande est la suivante.

symfony console make:twig-extension

Dans notre exemple nous appellerons cette extension "TestExtention".

Un fichier est alors créé dans le dossier Twig lui-même créé dans le dossier src de notre projet.

Fichier .env dans Symfony4

Le fichier TestExtension se présente sous cette forme.

namespace App\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;

class TestExtension extends AbstractExtension
{
    public function getFilters(): array
    {
        return [
            // If your filter generates SAFE HTML, you should add a third
            // parameter: ['is_safe' => ['html']]
            // Reference: https://twig.symfony.com/doc/2.x/advanced.html#automatic-escaping
            new TwigFilter('filter_name', [$this, 'doSomething']),
        ];
    }

    public function getFunctions(): array
    {
        return [
            new TwigFunction('function_name', [$this, 'doSomething']),
        ];
    }

    public function doSomething($value)
    {
        // ...
    }
}

Décortiquer le fichier

Comme vous pouvez l'observer, il y a trois méthodes. L'une des méthodes (getFilter) concerne les filtres. Nous en rappellerons plus bas. La deuxième méthode (getFunctions) s'occupe des fonctions.

Dans le return de cette méthode nous pouvons placer les fonctions qui doivent être utilisées dans un template Twig. On associe cette fonction à une méthode de la classe générée afin de lui attribuer des fonctionnalités et des résultats.

Exemple d'utilisation d'une fonction Twig

Dans notre exemple, nous imaginons que nous souhaitons créer une fonction qui permet de retourner le nombre de caractères d'une chaîne de caractères.

Ajouter une fonction à l'extension

    public function getFunctions(): array
    {
        return [
            new TwigFunction('nbre_chaine_de_caractere', [$this, 'nbre_caractere']),
        ];
    }

    public function nbre_caractere($value)
    {

        // Nous utilisons la fonction PHP strlen
        // Elle renvoie le nombre de caractères d'un chaîne

        return strlen($value);
    }

Template Twig

{{ nbre_chaine_de_caractere('Henrique Rodrigues')}}

Résultat de la fonction

Le résultat est de 18, car le nom "Henrique Rodrigues" contient 18 caractères avec l'espace.

Création d'un filtre Twig

Pour les filtres il faut également créer une extension pour pouvoir les lister dans celle-ci. Le principe est le même que pour les fonctions.

Exemple d'utilisation d'un filtre

Nous allons utiliser le même exemple que pour la fonction avec le même résultat, mais fait d'une autre façon, car cette fois-ci nous utiliserons un filtre.

Ajouter un filtre à l'extension

    public function getFilters(): array
    {
        return [
            // If your filter generates SAFE HTML, you should add a third
            // parameter: ['is_safe' => ['html']]
            // Reference: https://twig.symfony.com/doc/2.x/advanced.html#automatic-escaping
            new TwigFilter('nbre_chaine_de_caractere', [$this, 'nbre_caractere']),
        ];
    }

    public function nbre_caractere($value)
    {

        // Nous utilisons la fonction PHP strlen
        // Elle renvoie le nombre de caractères d'un chaîne
        return strlen($value);
    }

Template Twig pour le filtre

{{ 'Henrique Rodrigues'|nbre_chaine_de_caractere }}

Résultat du filtre

Le résultat est exactement le même que pour la fonction : 18.

Différence entre une fonction et un filtre

On peut atteindre le même but avec un filtre ou une fonction. La seule différence réside sur la manière de procéder ou de traiter l'information dans le template Twig.

Je veux parler avec Henrique

Me parler :

Si vous souhaitez me contacter, vous pouvez accéder à la page d'accueil.

Attendre
Patientez ...