Petit problème lors de la création d'une extension Twig : comment faire pour que Sf2 la reconnaisse ? Il semble qu'il faille jouer avec les injections de dépendances, domaine qui me reste assez flou...

Pour faire simple, j'ai copié ce qui se faisait dans le AcmeBundle : dans mon bundle, j'ai un dossier Twig > Gabarit > GabaritExtension.php, avec mon extension.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
namespace Quiz\QuizBundle\Twig\Gabarit;
 
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Bundle\TwigBundle\Loader\FilesystemLoader;
 
class GabaritExtension extends \Twig_Extension
{
    // ...
 
    public function getFilters()
    {
        return array(
            'gab_right' => new \Twig_Filter_Method($this, 'gabRight', array('is_safe' => array('html'))),
        );
    }
 
    // ...
}
exit;
Remarquez le exit; à la fin : il ne fait rien... Si je mets un var_dump juste avant, il ne m'affiche rien non plus, je crains que Sf2 n'aille jamais regarder le contenu de ce fichier...

J'ai suivi l'exemple avec un dossier DependencyInjection à la racine de mon bundle, avec ce contenu :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
namespace Quiz\QuizBundle\DependencyInjection;
 
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
 
class GabaritExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
 
    public function getAlias()
    {
        return 'gabarit';
    }
}
Et le fichier de configuration :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
services:
    twig.extension.twigext:
        class: Quiz\QuizBundle\Twig\Gabarit\GabaritExtension
        tags:
            - { name: twig.extension }
Comment faire que mon extension soit chargée ? Où faut-il enregistrer l'injection de dépendances (je crains que ce ne soit ça qui manque, car un exit; dans le fichier d'injection ne fait rien non plus) ?