Bonjour tout le monde,

Voila je rencontre un petit problème avec symfony 4 et plus précisement la création de fonctions personnalisées Twig. En effet, j'aimerai crée une fonction toute bête et l'utiliser, seulement je galère un peu au niveau de l'utilisation. Je vous explique....

Ce que je fais

Dans un premier temps je créer la fonction a l'aide de la commande php bin/console make:twig-extension IsActiveRoute. Et je créer ma fonction. La voici :

<?php

namespace App\Twig;

use Symfony\Component\HttpFoundation\Request;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class IsActiveRouteExtension extends AbstractExtension
{
    public function getFunctions(): array
    {
        return [
            new TwigFunction('function_name', [$this, 'isActiveRoute']),
        ];
    }

    function isActiveRoute(Request $request, $route, $output = 'active')
    {
        if ($request->get('_route') == $route) {
            return $output;
        }

        return false;
    }
}

Ensuite d'après la documentation, je dois enregistrer la class comme une service et lui assigner le tag 'twig.extension' dans le fichier 'service.yaml'. Ok donc si j'ai bien compris je fais la chose suivante dans mon fichier service.yaml

services:
    App\Twig\IsActiveRouteExtension:
        tags: ['twig.extension']

Toujours d'après la documentation, je suis censé avoir terminé et être capable d'utiliser ma fonction dans une vue twig.

J'essaye donc quelque chose comme cela, quelque part dans ma vue :

{{ IsActiveRoute('home') }}

Cepandant...

Ce que j'obtiens

J'obtiens la vilaine erreur suivante, sans trop comprendre pourquoi :

Unknown "isActiveRoute" function.

J'ai exploré un peu google sans grand succes, c'est pourquoi je vous demande votre aide a ce sujet, en espèrant que vous pourrez m'apporter quelques éléments de réponse :)

4 réponses


Balbert
Réponse acceptée

Hello

Dans ta classe IsActiveRouteExtension remplace function_name par isActiveRoute

Hello

Dans ta classe IsActiveRouteExtension remplace function_name par isActiveRoute

Merci Balbert.

C'était tellement gros, que je me demande comment j'ai pu passer a coté !

N'oublie pas aussi de mettre ta fonction isActiveRoute en public