2013-01-15 4 views
4

Est-il possible de créer plusieurs extensions Twig? Parce que quand j'ajoute un deuxième, j'obtiens le message d'erreur que la première méthode d'extension n'existe pas dans la deuxième extension.Extensions multiples Twig Symfony2

Voici comment mon extension sont définies dans services.xml:

<service id="acme.extension.view_helper" class="FLS\AcmeBundle\Extension\ViewHelperExtension"> 
     <argument type="service" id="doctrine.orm.entity_manager" /> 
     <tag name="twig.extension" /> 
</service> 

<service id="acme.extension.stats_helper" class="FLS\AcmeBundle\Extension\StatsExtension"> 
     <argument type="service" id="doctrine.orm.entity_manager" /> 
     <tag name="twig.extension" /> 
</service> 

Et voici le message d'erreur:

Fatal error: Call to undefined method FLS\AcmeBundle\Extension\StatsExtension::findTask() in F:\www\AcmeBundle\app\cache\dev\twig\fe\fd\4ff31bf8efd0669b6d0b2a14ba11.php on line 232

La méthode findTask est définie dans ViewHelperExtension.

Merci d'avance!

+0

pouvez-vous partager vos codes ViewHelperExtension et StatsExtension s'il vous plaît – Luke

+0

Même problème rencontré ici. Les définitions de service sont Ok. Semble être le cas d'un comportement étrange: en définissant deux extensions de service seulement le dernier défini est disponible. Ce problème peut être lié à Twig –

+0

J'ai le même problème mais seulement si les services sont dans le même paquet – Fabien

Répondre

0

J'utilise plusieurs extensions twig dans mon projet et tout va bien. Vos services.xml contiennent des étiquettes de service? <services> // Services definition </services> Cela ressemble au remplacement d'un second service en premier.

Article How to write a custom Twig Extension

+0

Curieusement, tout ce que j'ai dû faire dans le fichier services.xml est de déplacer l'ordre de mes définitions de services. Par exemple, j'ai inséré entre les deux définitions de mes extensions une autre définition de service pour un FormHandler et le problème de remplacement a disparu ... – Frank6

0

Edit: TL; DR. Oui. C'est possible

Je viens d'avoir ce problème en ce moment. Dans mon cas, la raison en était que j'ai commencé avec le même passe-partout pour les deux extensions et la fonction getName() à l'intérieur de chacun renvoyait le même nom.

Une fois que j'ai changé le nom que cette fonction renvoie sur chaque extension, les deux extensions ont été ajoutées. Je suppose que quelque chose comme ce qui suit fonctionnerait:

En src/AppBundle/Brindille/AppBundleFooExtension.php

/* ... */ 
public function getName() 
{ 
    return 'appbundle_foo_extension'; 
} 
/* ... */ 

En src/AppBundle/Brindille/AppBundleBarExtension.php

/* ... */ 
public function getName() 
{ 
    return 'appbundle_bar_extension'; 
} 
/* ... */ 
Questions connexes