如何在控制器上使用Twig过滤器“ time_diff”?

时间:2019-01-07 10:41:06

标签: php symfony twig twig-extension

我正在使用Symfony 3.0版本进行项目开发,并添加了一个位置,用户可以在该位置看到添加该项目的时间。为了能够使用此功能,我将日期扩展名添加到了services.yml文件中,如下所示:

twig.extension.date:
       class: Twig_Extensions_Extension_Date
       tags:
            - { name: twig.extension }

现在我可以使用以下代码:{{ answer.answeredAt|time_diff }},一切都正确,因为它显示了例如“ 2小时前”。

我的问题是,某些“答案”可以通过javascript调用添加。我搜索了一下,最好的选择是将控制器中的那个树枝部分渲染为字符串,然后将其发送回javascript响应中。这样:

$now = new \DateTime();
$template = $this->get('twig')->createTemplate('{{ answeredAt|time_diff }}');
$date = $template->render(['answeredAt' => $now]);

$response = new JsonResponse([
    'answer' => [
        'id' => $answer->getId(),
        'text' => $answer->getText(),
        'date' => $date
    ]
]);

我认为这应该工作正常,但事实并非如此。尽管没有错误,但日期字段始终返回为空。我需要在services.yml上做一些特殊的事情以使扩展在控制器上可用吗?

1 个答案:

答案 0 :(得分:1)

问题与日期差不存在有关,换句话说,当两个日期相同时,这些函数将返回空白,这使我误以为是错误的。

如果您检查我的代码,我正在寻找的是现在与new \DateTime()之间的区别,现在也是如此,因此,根本没有区别。

如果您仍然想向用户展示某些内容,就像我的案例一样,您可以使用以下代码:

$date = $template->render(['answeredAt' => $now->modify('-1 second')]);

这将向用户显示:“ 1秒前”。