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.

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

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

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

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

Читать

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

Февраль 28, 2025 г.

Задача - добавить rutube как oembed провайдера в медиа библиотеку, чтобы можно было создать медиа тип Rutube, где будет поле для ввода ссылки. Медиа поля ...

Читать

Drupal: как получить список target_id из ссылочного поля без перебора массива

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

При работе с сущностями в Drupal нередко возникает задача: из ссылочного поля (entity reference) нужно достать список ID связанных объектов. Например, у нас есть нода с полем field_other_exclusions. Если вывести его содержимое через getValue(), ...

Читать

Табличное редактирование мультиполей в Drupal через Paragraphs и Field Group

Октябрь 14, 2025 г.

Иногда при работе с Drupal возникает необходимость оформить ввод набора однотипных данных — например, списка характеристик, параметров или цен — не в виде ...

Читать
 

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

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



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