我只是试图根据example
制作一个简单的TWIG过滤器的src / BlogBundle /服务/ 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') }}
会返回正确的日期。
答案 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构造函数。