Каким образом можно подключить собственный фильтр к 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; }));