在Symfony中编写Twig扩展时,为什么必须提供getName()?

时间:2015-12-18 08:57:04

标签: php symfony twig

以下是编写Twig Extensions的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函数()。

那么我们为什么要提供一个呢?它有什么用途?

3 个答案:

答案 0 :(得分:2)

根据界面,查看Twig_ExtensionInterface Twig_Extension实施,getName()需要在您的自定义树枝扩展程序中实现。

根据sensiolabs(link here)的人们提供的枝条文件:

  

为了使您的扩展类保持干净和精益,它可以从内置的Twig_Extension类继承而不是实现整个接口。这样,您只需要实现getName()方法,因为Twig_Extension为所有其他方法提供了空实现。

     

getName()方法必须为您的扩展程序返回唯一标识符。

答案 1 :(得分:1)

方法getName()Twig_ExtensionInterface实施的Twig_Extension中定义。

来源:https://github.com/twigphp/Twig/blob/1.x/lib/Twig/ExtensionInterface.php

确保每个扩展名都有名称的好方法。

答案 2 :(得分:0)

与他评论中提到的@DarkBee一样,在{2}的2.0版本中删除了getName()Twig_ExtensionInterface方法。

Twig 1.x API我们可以看到该方法自版本1.26以来已被弃用,并在版本2.0中被删除。它也可以在changelog

中看到
  

1.26.0(2016-10-02)

     
      
  • ...
  •   
  • 已弃用Twig_ExtensionInterface::getName()
  •   

另外,看例如在getExtension($name) method in Environment.php of Twig version 1.25.0,我们可以看到该方法用于通过 name 获取扩展名,而在version 1.26.0version 2.4.4中,该方法用于通过类名获得扩展名。

所以,

  • 如果您使用的是Twig 1.25或更早版本,则需要实施getName()方法。
  • 如果您使用Twig版本1.26.0(2016年10月2日发布)或更高版本或版本2.x,则不应使用getName()方法。 (嗯,你可以,但Twig没有使用它。)