Столкнулась с необходимостью обновить часть страницы, созданной в Twig, с помощью ajax-запроса. Как обновить страницу, используя шаблон, где есть готовый цикл, который я хочу снова использовать? В поиске готовых вариантов нашла всего один вопрос на StackOverflow и кучу кривых переводов той же страницы. Возможно, решение такое тривиальное? Или никто не занимается этим? Или мои навыки поиска решений далеки от идеала?
В любом случае, на будущее запишу своё решение.
Задача и код сильно упрощены, в моём проекте нужно было получать другие объекты.
Задача:
Каждые 10 секунд обновлять на странице данные: показывать 10 последних комментариев.
Алгоритм:
- Ту часть страницы, которую нужно обновлять, выделить в отдельный шаблон.
 - При запросе обрабатывать этот отдельный шаблон и отправлять результат в ответе.
 
Я использую Symfony 4, и вот в контроллере есть страница, где выводятся последние комментарии:
Исходный код
1  | public function commentsPage()  | 
Её шаблон выглядит как-то так (очень упрощаю для примера):
1  | {# comments_page.html.twig #}  | 
При обновлении страницы последние комментарии будут обновляться. А мы хотим делать это без обновления страницы.
Новый twig-шаблон
Первым делом я выделю кусочек с комментариями в отдельный шаблон. (Лучшие практики: название файла с кусочком шаблона начинается с нижнего подчёркивания).
1  | {# _last_comments.html.twig #}  | 
И изменю шаблон первоначальный:
1  | {# comments_page.html.twig #}  | 
Новый php-код
Нужно добавить страницу, к которой будем делать ajax-запрос.
1  | /**  | 
JavaScript
Осталось добавить собственно запрос и повторять его.
1  | {# comments_page.html.twig #}  |