28

テンプレートで、サーバーのタイムゾーンを出力したいと思います。

私のテンプレートには次のようなものがあります

{{ 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() }}ストレートコールを行う方法はありますか?

4

4 に答える 4

44

getFunctions()の代わりに使用getFilters()

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

Twigフィルターは、いくつかの値をフィルター処理するために使用されます。

{{ "some value" | filter_name_here }}

ところで、同じクラスでフィルターと関数の両方を定義できます。

于 2012-11-07T20:19:14.717 に答える
6

の代わりにgetFilters、オーバーライドして、の代わりにgetFunctions使用します。Twig_Function_MethodTwig_Filter_Method

于 2012-11-07T20:18:31.063 に答える
6

新しいバージョンの Twig では、Twig_Function_Method の代わりに Twig_SimpleFunction を、Twig_Filter_Method の代わりに Twig_SimpleFilter を使用する必要があります。これは、Twig_*_Method が非推奨になっているためです (私は Symfony 2.8.2 と共に Twig v. 1.24.0 を使用しています)。

于 2016-05-27T11:08:25.510 に答える