我正在使用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上做一些特殊的事情以使扩展在控制器上可用吗?
答案 0 :(得分:1)
问题与日期差不存在有关,换句话说,当两个日期相同时,这些函数将返回空白,这使我误以为是错误的。
如果您检查我的代码,我正在寻找的是现在与new \DateTime()
之间的区别,现在也是如此,因此,根本没有区别。
如果您仍然想向用户展示某些内容,就像我的案例一样,您可以使用以下代码:
$date = $template->render(['answeredAt' => $now->modify('-1 second')]);
这将向用户显示:“ 1秒前”。