Drupal: возврат страницы из контроллера с установкой cookie и использованием шаблона темы

В Drupal контроллеры чаще всего возвращают Renderable-массивы. Такие массивы автоматически проходят через систему рендеринга и подставляются в базовый шаблон темы (page.html.twig). Но иногда бывает нужно получить полный Response с темизацией вручную — например, когда дополнительно требуется работать с заголовками, cookie или особыми параметрами ответа.

В этой статье разберём технику возврата страницы из контроллера, которая одновременно:

  • использует основной шаблон сайта (page.html.twig);
  • может установить cookie;
  • позволяет при необходимости встроить кастомный контент и скрипты.

Пример: промежуточная страница с установкой cookie

Рассмотрим контроллер, в котором показывается промежуточная страница. На ней можно вывести сообщение, подключить библиотеку JS, а заодно установить cookie (например, выбранный город).

В маршрутах добавим путь к нашему контроллеру (mymodule.routing.yml):

Передаётся два параметра — это node id статьи, куда будет сделан редирект, и код города, который будет установлен как cookie в response объекте.

Что здесь происходит

Здесь много кода, который не важен для примера, но для цельности картинки я его оставляю. Что важно:

  1. Готовим render-массив ($build), как обычно. Его содержимое будет вставлено в зону {{ page.content }} основного шаблона page.html.twig. Тут мы без проблем можем подключить какие то front-end библиотеки.
  2. Вызываем сервис main_content_renderer.html. Он берёт render-массив и прогоняет его через систему темизации Drupal. В результате получается готовый HtmlResponse.
  3. Устанавливаем cookie с помощью $response->headers->setCookie($cookie).
  4. Возвращаем Response из контроллера.

Таким образом, мы получаем полноценную страницу Drupal (с шапкой, футером и всеми блоками), но при этом имеем контроль над HTTP-заголовками.

Когда это полезно

  • нужно отобразить промежуточную страницу (например, при редиректах);
  • требуется выставить cookie или спец. заголовки;
  • нужно работать с Response напрямую, но при этом сохранить стандартный шаблон Drupal.

Мало букафф? Читайте есчо !

VK Video: интегрируем как oembed provider source в Drupal

Апрель 12, 2025 г.

Еще один oembed провайдер, который мне понадобился не давно - VK VIDEO. Нужно было интегрировать видео с ВКонтакте в медиа библиотеку Drupal. Если ...

Читать

Как сформировать отдельный хидер или футер для первой страницы в mPDF на примере Drupal

Декабрь 6, 2025 г.

Когда вам нужно создать PDF-документ с использованием библиотеки mPDF, бывает необходимо сделать так, чтобы на первой странице отображался отдельный футер (или хидер), отличающийся от остальных страниц. В этом примере мы рассмотрим, как использовать селектор ...

Читать

Подключаем yandex cloud как s3 в Drupal

Апрель 3, 2025 г.

Облачные файловые хранилища Яндекса можно подключить и использовать в вашем проекте на drupal через модуль s3fs. А именно, хранить там т.н. юзерфайлы, ...

Читать

Форматирование дат в Twig на Drupal 10/11: date и format_date() с примерами

Август 8, 2025 г.

В Drupal 10/11 при работе с шаблонами Twig часто требуется вывести дату в нужном формате — будь то текущая дата, дата из поля сущности или timestamp. Для этого можно использовать стандартный Twig-фильтр date, а также функцию format_date(). В этой статье ...

Читать
 

Комментарии к «Drupal: возврат страницы из контроллера с установкой cookie и использованием шаблона темы»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: