在Symfony 2.7应用程序中,我们尝试设置一个humanize_bytes
Twig过滤器,以便将大量字节转换为易于理解的形式,例如10 MB
。
我们的HumanReadableBytesExtension.php
文件中的内容如下:
public function getFilters() {
return [
new TwigFilter('humanize_bytes', [$this, 'getHumanReadableBytesFilter'])
];
}
...,并且在我们的services.yml
文件中包含以下内容:
mycompany.cms.twig.extension.human_readable_bytes_extension:
class: MyCompany\TwigExtensions\HumanReadableBytesExtension
arguments:
- '@translator'
tags:
- {name: twig.extension}
...但是我们发现没有调用getFilters()
方法,并且当我们尝试在Twig模板中调用过滤器时,得到:
未知的“ humanize_bytes”过滤器。
两个文件均通过语法验证。缓存已清除。还有其他地方我们应该注册此过滤器吗?
====
编辑:这是app/console debug:container mycompany.cms.twig.extension.human_readable_bytes_extension
命令的输出:
[容器]服务信息 mycompany.cms.twig.extension.human_read_bytes_extension服务ID
mycompany.cms.twig.extension.human_read_bytes_extension类别
MyCompany \ TwigExtensions \ HumanReadableBytesExtension标记 -twig.extension()范围容器公共是合成否惰性否 同步否抽象否
答案 0 :(得分:0)
您提到您正在使用抽象类。您是否在getName
中覆盖了HumanReadableBytesExtension
方法?
如果两个扩展名具有相同的名称,则只会加载一个扩展名,而第二个扩展名将被静默忽略。
答案 1 :(得分:0)
我最终只是接受了所有更改并将它们放在新的功能分支上。尽管以一种非常不令人满意的方式,它“解决了”问题。 (我们从未真正弄清楚出了什么问题。)