如何在控制器上使用 Twig 过滤器 "time_diff"?
How to use Twig filter "time_diff" on the Controller?
我正在使用 Symfony 3.0 版本开发一个项目,我添加了一个位置,用户可以在其中查看该项目是在多少年前添加的。为了能够使用它,我将日期扩展添加到 services.yml 文件中,如下所示:
twig.extension.date:
class: Twig_Extensions_Extension_Date
tags:
- { name: twig.extension }
现在我可以使用以下代码:{{ answer.answeredAt|time_diff }}
一切正常,因为它显示了例如“2 小时前”。
我的问题是,其中一些 "answers" 可以通过 javascript 调用添加。我搜索了一下,最好的选择是在控制器中将这个 twig 位渲染为字符串,然后在 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 上做一些特殊的事情才能使扩展在控制器上可用?
问题与日期不存在差异时有关,换句话说,当两个日期相同时,函数将 return 空白,这误导我以为出了什么问题.
如果你检查我的代码,我正在寻找现在和 new \DateTime()
之间的区别,这也是现在,所以,根本没有区别。
如果你还想向用户展示一些东西,就像我的情况一样,你可以使用下面的代码:
$date = $template->render(['answeredAt' => $now->modify('-1 second')]);
这将向用户显示:“1 秒前”。
我正在使用 Symfony 3.0 版本开发一个项目,我添加了一个位置,用户可以在其中查看该项目是在多少年前添加的。为了能够使用它,我将日期扩展添加到 services.yml 文件中,如下所示:
twig.extension.date:
class: Twig_Extensions_Extension_Date
tags:
- { name: twig.extension }
现在我可以使用以下代码:{{ answer.answeredAt|time_diff }}
一切正常,因为它显示了例如“2 小时前”。
我的问题是,其中一些 "answers" 可以通过 javascript 调用添加。我搜索了一下,最好的选择是在控制器中将这个 twig 位渲染为字符串,然后在 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 上做一些特殊的事情才能使扩展在控制器上可用?
问题与日期不存在差异时有关,换句话说,当两个日期相同时,函数将 return 空白,这误导我以为出了什么问题.
如果你检查我的代码,我正在寻找现在和 new \DateTime()
之间的区别,这也是现在,所以,根本没有区别。
如果你还想向用户展示一些东西,就像我的情况一样,你可以使用下面的代码:
$date = $template->render(['answeredAt' => $now->modify('-1 second')]);
这将向用户显示:“1 秒前”。