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


Silex/Twig : Conflict between a custom filter and form widget

我想我在Silex Twig Provider中发现了一个bug。我尝试在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: filter "trans"不存在"form_div_layout.html。第75行

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

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

但它不起作用,也许是因为我使用翻译提供程序来翻译错误消息…

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

谢谢

Silex文档显示了以下代码作为示例:

$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;
}));

我想你应该试着用这种方法添加滤镜

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

按顺序:

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