Bei der Verwendung von mehreren Twig Extensions mit jeweils eigenen Funktionen bekommt man schnell eine Fehlermeldung à la
The function “my_function” does not exist in mytemplate.html.twig at line 42
Meine erste Idee war, dass das an der Art der Registrierung in den Extensions liegt:
1 2 3 4 5 6 |
public function getFunctions() { return array( new \Twig_SimpleFunction('my_function', array($this, 'mySpecialPhpFunction')), ); } |
– vielleicht überschreibt ja jeder Aufruf von getFunctions() das vorherige Array? Mein Ansatz: Statt der Rückgabe eines Arrays in getFunctions() lieber jede Funktionen (hier: im Konstruktor der Extension) separat adden:
1 |
$this->container->get('twig')->addFunction(new \Twig_SimpleFunction('my_function', array($this, 'mySpecialPhpFunction'))); |
Leider lag es gar nicht daran. Stattdessen hatte ich einfach in der zweiten, neuen Extension nach dem Copy&Paste vergessen, den Namen zu korrigieren:
1 2 3 4 |
public function getName() { return 'my_extension'; } |
Der fungiert offenbar als eine Art Namespace, in dem sie die Arrays vermutlich tatsächlich überschrieben haben 🙂 Anyway: Die alternative Methode der Definition von Funktionen mag noch mal hilfreich sein.