Столкнулась с необходимостью обновить часть страницы, созданной в 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 #} |