【发布时间】:2016-05-07 19:38:02
【问题描述】:
我有一个非常专业的过滤器,我想将其用于单个页面,而不是使其成为全局过滤器。我试过这样做(这不是我想要的功能,这只是一个测试):
$this->get('twig')
->addFilter(new \Twig_SimpleFilter('chgname', function ($string) {
return substr($string, 0, 5);
}));
但我收到错误消息“无法添加过滤器,因为扩展已经初始化”。
我知道我可以在 AppBundle/Twig 目录中创建一个类并将其添加为服务,但是 1)它非常繁重,而且 PITA 仅用于我需要的一个简单过滤器,并且 2)它使其全局整个应用程序,这对于我在本地需要的东西来说是愚蠢的。
有什么办法可以做到这一点,还是我只坚持全局扩展?提前致谢。
【问题讨论】:
-
如果你想在本地做,只需在控制器中使用
substr()并将结果传递给twig。 -
他说这不是他想要的功能。不过,我不得不问 op,在你的包/应用程序中全局使用它有什么问题?这是正确的做法,它不重,是否“全球”有什么关系?
-
只能在控制器中完成一页的功能,我认为为此制作树枝过滤器没有意义。过滤器适用于可重用的用例。
-
所以,只要做那个过滤器,不要问你知道答案的问题。
-
好吧,我不知道答案,这就是我问的原因。不过,我真的没想到人们会尝试证明全局变量是任何人都应该需要的。
标签: symfony filter twig local twig-extension