Bonjour,
J'aimerais créé un test personnel afin de comprendre son implémentation. Voici le code:
-Création de l'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
<?php
//src/Test/Bundle/Twig/FooExtension.php
namespace Test\Bundle\Twig;
class FooExtension extends \Twig_Extension
{
 
    public function getTests()
    {
        return array(
            new \Twig_SimpleTest('foo', null, array('node_class' => 'Foo')),
        );
    }
 
    public function getName()
    {
        return 'foo_extension';
    }
}
-Class Foo
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
<?php
//C:\wamp\www\Symfony\src\Test\Bundle\Twig\Foo.php
 
class Foo extends \Twig_Node_Expression_Test
{
    public function compile(\Twig_Compiler $compiler)
    {
        $compiler
            ->raw('(')
            ->subcompile($this->getNode('node'))
            ->raw(' % 2 == 1')
            ->raw(')')
        ;
    }
}
-Enregistrement de l'extension
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
services:   
 
    test.twig.foo_extension:
        class: Test\Bundle\Twig\FooExtension
        tags:
            - { name: twig.extension }
Du coup, j'obtient cette erreur:
FatalErrorException: Error: Class 'Foo' not found in C:\wamp\www\Symfony\vendor\twig\twig\lib\Twig\Extension\Core.php line 277
Je crois ce serait dû à l'emplacement de ma classe Foo. En essayant de le déplacer vers C:\wamp\www\Symfony\vendor\twig\twig\lib\Twig\Node\Expression\Test\Foo.php, cela fonctionne bien. Mais avant, il a fallut que je remplace cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
new \Twig_SimpleTest('foo', null, array('node_class' => 'Foo')),
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
new \Twig_SimpleTest('foo', null, array('node_class' => 'Twig_Node_Expression_Test_Foo')),
et celle-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
class Foo extends \Twig_Node_Expression_Test
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
class Twig_Node_Expression_Test_Foo extends \Twig_Node_Expression_Test
J'aimerais avoir votre avis car cela ne me semble pas normal de mettre une extension personnalisée dans le dossier vendor.

Merci d'avance!