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 11

Март 13, 2025 г.

Если не хочется объявлять дополнительный регион, чтобы настроить вывод блока через админку, то можно сделать рендер блока программно. Например добавим в препроцессинг страницы переменную с рендером блока branding. Этот блок предоставляется модулем ...

Читать

Как в шаблоне параграфа получить заголовок родительской ноды

Сентябрь 15, 2025 г.

Иногда возникает задача: в Twig-шаблоне параграфа (paragraph.html.twig) нужно отобразить заголовок материала (ноды), к которому этот параграф прикреплён. Нам не нужно передавать что то дополнительно в шаблон, эти данные могут быть получены из самой ...

Читать

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

Апрель 6, 2025 г.

Drupal config API позволяет не только прочитать сами настройки, но и файлы их определений. В общем то это очевидно, покажу как это делается. Допустим ...

Читать

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

Март 9, 2025 г.

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

Читать
 

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

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



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