在 Twig 中使用自定义函数

2022-08-30 15:12:53

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

我的模板有类似的东西

{{ getservertimezone }}

然后在该捆绑包的配置中,我有services.yml

my.twig.extension:
    class: My\WebsiteBundle\Extensions\Twig\SomeTemplateHelper
    tags:
           - { name: twig.extension }

而我的长相像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';
    }
    
}

但是我不能调用此方法,除非它像过滤器一样使用:;有没有办法直接打电话?{{ someval | getservertimezone }}{{ getservertimezone() }}


答案 1

使用而不是getFunctions()getFilters()

public function getFunctions()
{
    return array(
        new \Twig_SimpleFunction('server_time_zone', array($this, 'getServerTimeZone')),
    );
}

树枝过滤器用于过滤某些值。

{{ "some value" | filter_name_here }}

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


答案 2

而不是 ,覆盖和使用 代替 。getFiltersgetFunctionsTwig_Function_MethodTwig_Filter_Method


推荐