以下是编写Twig扩展的Symfony指南:http://symfony.com/doc/current/cookbook/templating/twig_extension.html
注意它说要提供:
// src/AppBundle/Twig/AppExtension.php
namespace AppBundle'Twig;
class AppExtension extends 'Twig_Extension
{
public function getName()
{
return 'app_extension';
}
}
以下是Twig API:https://github.com/twigphp/Twig/blob/1.x/lib/Twig/Extension.php
那里没有getName函数()。
那么,为什么我们必须提供一个呢?它有什么作用?
看看Twig_Extension
实现的Twig_ExtensionInterface
,getName()
需要根据接口在您的自定义分支扩展中实现。
根据sensiolabs的人员的树枝文档(此处链接):
为了保持扩展类的简洁性,它可以继承内置的
Twig_Extension
类,而不是实现整个接口。这样,您只需要实现getName()
方法,因为Twig_Extension
为所有其他方法提供了空的实现。
getName()
方法必须为您的扩展返回一个唯一的标识符。
方法getName()
在Twig_Extension
实现的Twig_ExtensionInterface
中定义。
来源:https://github.com/twigphp/Twig/blob/1.x/lib/Twig/ExtensionInterface.php
这是确保每个扩展都有名称的好方法。
就像@DarkBee在他的评论中提到的那样,类Twig_ExtensionInterface
的getName()
方法在Twig的2.0版本中已经被删除。
从Twig 1.x API中,我们可以看到该方法从1.26版本开始就被弃用,并在2.0版本中被删除。它也可以在变更日志中看到:
1.26.0(2016-10-02)
- 已弃用的
Twig_ExtensionInterface::getName()
此外,例如,查看Twig版本1.25.0的Environment.php
中的getExtension($name)
方法,我们可以看到该方法用于通过其名称获得扩展,而在版本1.26.0和版本2.4.4中,该方法用于根据其类名来获得扩展。
所以,
- 如果使用的是Twig版本1.25或更早版本,则需要实现
getName()
方法 - 如果您使用Twig 1.26.0版本(2016年10月2日发布)或更高版本,或2.x版本,则不应实现
getName()
方法。(嗯,你可以,但Twig没有使用它。)