Заголовки в теле ответа при использовании Symfony ESI

Изучаю Symfony 6 по книге Фабиена Потенсьера "Symfony: The Fast Track". Добавляю, как описано в книге, контроллер для обработки подзапроса:

#[Route('/conference_header', name: 'conference_header')]
public function conferenceHeader(ConferenceRepository $conferenceRepository): Response
{
    $response = new Response($this->render('conference/header.html.twig', [
        'conferences' => $conferenceRepository->findAll(),
    ]));

    return $response;
}

Затем создаю шаблон header.html.twig:

<ul>
    {% for conference in conferences %}
        <li><a href="{{ path('conference', { slug: conference.slug }) }}">{{ conference }}</a></li>
    {% endfor %}
</ul>

И наконец, включаю обработку области в шаблоне страницы при помощи:

<header>
    <h1><a href="{{ path('homepage') }}">Guestbook</a> </h1>
    {{ render_esi(path('conference_header')) }}
</header>

В итоге, на целевой странице, перед сгенерированным списком выводятся еще и сами заголовки подзапроса:

<header>
    <h1>...</h1>
    HTTP/1.0 200 OK Cache-Control: no-cache, private Date: Mon, 25 Apr 2022 13:25:24 GMT
    <ul>...</ul>
</header>

Как от них можно избавиться? В самой книге ничего такого не описывается, а в документации объяснение подобного поведения найти не удалось. Спасибо за помощь!


Ответы (1 шт):

Автор решения: Dmitry Kozlov

Так происходит, потому, что вы оборачиваете Response в еще один Response

$response = new Response($this->render(....

Поменяйте код на

public function conferenceHeader(ConferenceRepository $conferenceRepository): Response
{
    $response = $this->render('conference/header.html.twig', [
        'conferences' => $conferenceRepository->findAll(),
    ]);

    return $response;
}

Embedding Controllers

→ Ссылка