我正在使用Symfony 3.0版本进行一个项目,我添加了一个地方,用户可以在这里看到该项添加的时间。为了能够使用它,我在服务中添加了日期扩展。yml文件如下所示:
twig.extension.date:
class: Twig_Extensions_Extension_Date
tags:
- { name: twig.extension }
现在我可以使用下面的代码:{{answere.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
]
]);
我认为这应该可以很好地工作,但事实并非如此。虽然没有出现错误,但日期字段总是返回为空。我需要做一些特别的服务吗。yml是否在控制器上提供扩展?
问题在于何时不存在日期差异,换言之,当两个日期相同时,函数将返回空白,这误导了我,使我认为有问题。
如果您检查我的代码,我会查找now和new\DateTime()
之间的差异,后者也是now,因此,没有任何差异。
如果您仍然希望向用户显示某些内容,就像我的案例一样,可以使用以下代码:
$date = $template->render(['answeredAt' => $now->modify('-1 second')]);
这将向用户显示:“1秒前”。