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.
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...
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;
J'ai suivi l'exemple avec un dossier DependencyInjection à la racine de mon bundle, avec ce contenu :
Et le fichier de configuration :
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'; } }
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) ?
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 }
![]()
Partager