Silex / Twig:自定义过滤器和表单小部件之间的冲突

时间:2014-06-24 09:52:45

标签: php twig silex

我想我在Silex Twig Provider中发现了一个错误。 我尝试在Twig中添加自定义过滤器(代码来自文档):

$filter = new Twig_SimpleFilter('rot13', function ($string) {
  return str_rot13($string);
});

$app['twig']->addFilter($filter);

问题是当我添加这个过滤器时,我尝试使用这样的form_widget:

{{ form_widget(form._token) }}

引发异常:

  

Twig_Error_Syntax:过滤器" trans"在...中不存在   " form_div_layout.html.twig"在第75行

我尝试在互联网上找到的解决方案,如:

$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'translator.messages' => array(),
));

但它不起作用,可能是因为我使用翻译提供程序翻译错误消息......

无论如何,添加一个过滤器不应该导致这种行为...

谢谢

2 个答案:

答案 0 :(得分:2)

Silex documentation show the following code为例:

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
  $twig->addGlobal('pi', 3.14);
  $twig->addFilter('levenshtein', new \Twig_Filter_Function('levenshtein'));
  return $twig;
}));

我认为您应该尝试以这种方式添加过滤器。

答案 1 :(得分:0)

我找到了解决方案:必须在TranslationServerProvider注册后添加addFilter。

按照我的顺序:

  1. FormServiceProvider
  2. TwigServiceProvider
  3. TranslationServiceProvider
  4. addFilter