Twig addFilter с использованием Silex?

Каким образом можно подключить собственный фильтр к Twig при использовании Silex, но сохранить существующие twig.options неповрежденными?

Вот что я имею в виду. У меня есть следующий код:

 $app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => dirname(__FILE__).'/view', 'twig.class_path' => dirname(__FILE__).'/vendor/twig/lib', 'twig.options' => array('cache'=>'folder/twig') )); function test() { return 'yay'; } $app['twig']->addFilter('test',new \Twig_Filter_Function('test')); 

Если я запускаю этот код как есть, фильтр НЕ РАБОТАЕТ.

Вместо этого Twig возвращает бесконечно кэшированную версию ПРЕДЫДУЩЕЙ ЗАПРОСА (даже если я очищаю содержимое кеша – я предполагаю, что это потому, что кеш хранится в другом месте, так как я перезаписываю twig.options … не уверен).

Однако, если я выровняю следующую строку:

 'twig.options' => array('cache'=>'folder/twig') 

… тогда все работает.

Как я могу заставить их играть хорошо? т.е. сохранить кеш и добавить настраиваемые фильтры?

Благодаря!

Вы должны создать расширение ветки и добавить свой фильтр там.

 #src/Insolis/Twig/InsolisExtension.php (snippet) <?php namespace Insolis\Twig; class InsolisExtension extends \Twig_Extension { public function getName() { return "insolis"; } public function getFilters() { return array( "test" => new \Twig_Filter_Method($this, "test"), ); } public function test($input) { return "yay"; } } 

Как зарегистрировать его:

 #app/bootstrap.php $app["twig"] = $app->share($app->extend("twig", function (\Twig_Environment $twig, Silex\Application $app) { $twig->addExtension(new Insolis\Twig\InsolisExtension($app)); return $twig; }));