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.

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

Проброс переменных из PHP в JS (в Drupal) с использованием js_settings_alter

Ноябрь 14, 2025 г.

В этой статье мы рассмотрим, как пробросить данные из PHP в JavaScript в Drupal 11 с использованием js_settings_alter(). Этот метод позволяет изменять или добавлять переменные в объект drupalSettings, который доступен в JavaScript на всех страницах. ...

Читать

Drupal: шаблоны для taxonomy_term и view mode — как добавить?

Июль 19, 2025 г.

При работе с таксономией в Drupal нередко возникает потребность отображать термины по-разному в зависимости от контекста. Например, один и тот же термин в режиме teaser должен выводиться компактно, а в режиме full — с подробным описанием. Если вы используете ...

Читать

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

Август 8, 2025 г.

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

Читать

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

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

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

Читать
 

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

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



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