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.
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.
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)
{
// ...
}
}
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.
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.
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);
}
{{ nbre_chaine_de_caractere('Henrique Rodrigues')}}
Le résultat est de 18, car le nom "Henrique Rodrigues" contient 18 caractères avec l'espace.
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.
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.
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);
}
{{ 'Henrique Rodrigues'|nbre_chaine_de_caractere }}
Le résultat est exactement le même que pour la fonction : 18.
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.
Me parler :
Si vous souhaitez me contacter, vous pouvez accéder à la page d'accueil.