Aller au contenu principal
Version: 0.7.3

Créer un filtre

Les filtres sont très pratiques pour altérer une chaîne de caractères.

Pour la création d'un filtre, tapez la commande php dobby make:twig:filter <FilterName>.

Cette commande va générer la classe suivante :

app/Twig/Filters/MailTo.php
<?php

namespace Elementum\Theme\Twig\Filters;

use Elementum\Services\Twig\Interface\TwigFilter;

class MailTo implements TwigFilter
{
    const NAME = 'mail_to';

    public static function call(string $string, ...$args)
    {
        $isValid = filter_var($string, FILTER_VALIDATE_EMAIL);
        if (!$isValid) {
            return $string;
        }

        $subject = $args[0] ?? null;
        $body = $args[1] ?? null;

        $href = "mailto:$string";

        if($subject) {
            $href .= "?subject=" . urlencode($subject);
        }

        if($body) {
            $href .= "&body=" . urlencode($body);
        }

        return $href;
    }
}

Le filtre doit retourner une chaîne de caractères.

Utilisation

Une fois le filtre créé, il peut être utilisé dans un template Twig de la manière suivante :

{{ user.email | mail_to }}
// <a href="mailto:elementum@devoweb.fr"></a>

{{ "elementum@devoweb.fr" | mail_to("Prise de contact", "Bonjour,") }}
// <a href="mailto:elementum@devoweb.fr?subject=Prise%20de%20contact&body=Bonjour,"></a>

Arguments

Le premier argument, $string représente la chaîne de caractères qui précède le filtre.

Les arguments suivants sont passés en paramètres de la fonction.

Interface TwigFilter

Afin de garantir que les filtres Twig soient correctement intégrés dans le système, il est nécessaire d'implémenter l'interface TwigFilter.

Cette interface oblige à avoir les constantes suivantes :

  • NAME : Le nom de la fonction

La méthode call est obligatoire et doit retourner une chaîne de caractères.

L'interface oblige à ce que la méthode call prenne uniquement des arguments facultatifs. C'est pourquoi, dans l'exemple, la méthode call prend un argument $name facultatif car elle possède une valeur par défaut.