Я работаю над проектом, использующим версию 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, чтобы сделать расширения доступными на контроллерах?