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.

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

Кастомные настройки сайта в Drupal

Март 9, 2025 г.

На сайте всегда (или почти всегда) возникает задача управления настройками вроде телефон, email, какие то текстовые элементы, вроде копирайта, адрес организации и т.п. С точки зрения данных - требуется объект в терминах шаблонов проектирования - синглтон. ...

Читать

Эффективное кеширование по доступу к ноде: параметрический Cache Context в Drupal

Июль 26, 2025 г.

Когда мы используем кеширование в Drupal, типичный подход — добавить user в список контекстов: ['user']. Это означает, что для каждого пользователя будет ...

Читать

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

Август 8, 2025 г.

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

Читать

Чтение данных из oembed провайдера

Март 11, 2025 г.

В Drupal 10/11 поддержка Oembed провайдеров в ядре (модуль media) позволяет легко и непринуждённо читать данные о медиа прямо из провайдера. Ранее я рассказывал как зарегистрировать oembed для rutube, чтобы иметь возможность оперировать видео контентом ...

Читать
 

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

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



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