如何在Symfony3中获取TWIG自定义过滤器参数?

时间:2016-01-30 18:50:27

标签: php twig symfony twig-filter

我只是试图根据example

制作一个简单的TWIG过滤器

的src / BlogBu​​ndle /服务/ TwigExtension.php

<?php

namespace BlogBundle\Services;

class TwigExtension extends \Twig_Extension {
    public function getFilters() {
        return [
            new \Twig_SimpleFilter('ago', [$this, 'agoFilter']),
        ];
    }

    public function agoFilter($date) {
        return gettype($date);
    }

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

services.yml

services:
    app.twig_extension:
        class: BlogBundle\Services\TwigExtension
        public: false
        tags:
            - { name: twig.extension }

并在一些template.twig

中使用它
{{ comment.date|ago }}

正确调用回调函数(agoFiler)并显示其输出,但我无法获取过滤器参数。在上面的示例中,我总是返回NULL,虽然comment.date是一个肯定的日期(默认TWIG的日期过滤器可以正常工作)。如何在beforeFilter函数中获得comment.date?

更新:{{ 5|ago }}按预期返回integer{{ [5]|ago }}返回array,但{{ comment.date|ago }}{{ comment.getDate()|ago }}仍返回NULL虽然{{ comment.date|date('d.m.Y') }}会返回正确的日期。

1 个答案:

答案 0 :(得分:1)

非常非常非常奇怪的事情。我不明白它是怎么回事,但在仔细阅读了TWIG的默认日期过滤器之后,我发现了一个解决方案:

public function agoFilter(\Twig_Environment $env, $date, $format = null, $timezone = null) {
    if ($date === null) $date = new \DateTime($date);
    return $date->format('d.m.Y');
}

虽然看起来很好,我将null传递给DateTime构造函数。