在树枝中使用自定义功能

ed2*_*209 24 php symfony twig

在我的模板中,我想输出服务器时区.

我的模板有类似的东西

{{ getservertimezone }}
Run Code Online (Sandbox Code Playgroud)

然后在我所拥有的捆绑的services.yml配置中

my.twig.extension:
    class: My\WebsiteBundle\Extensions\Twig\SomeTemplateHelper
    tags:
           - { name: twig.extension }
Run Code Online (Sandbox Code Playgroud)

我的SomeTemplateHelper样子

namespace My\WebsiteBundle\Extensions\Twig;

class SomeTemplateHelper extends \Twig_Extension
{

    public function getFilters() 
    {
        return array(
            'getservertimezone'  => new \Twig_Filter_Method($this, 'getServerTimeZone'),
        );
    }


    public function getServerTimeZone()
    {
        if (date_default_timezone_get()) {
            return date_default_timezone_get();
        } else if (ini_get('date.timezone')) {
            return ini_get('date.timezone');
        } else {
            return false;
        }
    }

    public function getName()
    {
        return 'some_helper';
    }

}
Run Code Online (Sandbox Code Playgroud)

但我不能称之为这种方法,除非它像过滤器那样使用{{ someval | getservertimezone }},有没有办法直接{{ getservertimezone() }}调用?

Vad*_*man 41

getFunctions()而不是getFilters()

public function getFunctions()
{
    return array(
        new \Twig_SimpleFunction('server_time_zone', array($this, 'getServerTimeZone')),
    );
}
Run Code Online (Sandbox Code Playgroud)

Twig过滤器用于过滤某些值.

{{ "some value" | filter_name_here }}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以在同一个类中定义过滤器和函数.


Eln*_*mov 6

而不是getFilters,覆盖getFunctions和使用Twig_Function_Method而不是Twig_Filter_Method.


小智 6

在较新版本的Twig中,他应该使用Twig_SimpleFunction而不是Twig_Function_Method和Twig_SimpleFilter而不是Twig_Filter_Method,因为弃用了Twig _*_ Method(我使用的是Twig v.1.24.0和Symfony 2.8.2)