[Twig] Création d'une extension et injection de dépendances
:salut:
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:
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:
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:
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) ?
:merci: