我想我在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。
按顺序:
- FormServiceProvider
- TwigServiceProvider
- TranslationServiceProvider
- addFilter