Я включил ESI для своего проекта Symfony и пытаюсь обслуживать мою домашнюю страницу, помеченную как общедоступную, которая включает частный фрагмент.
Контроллер домашней страницы:
$response = $this->render("myMainBundle:Page:home.html.twig", $data);
$response->setSharedMaxAge(60*60); //cache for 1 hour
return $response;
Просмотр домашней страницы:
{{ render_esi(controller('myMainBundle:Esi:homeHeaderNavigation')) }}
Контроллер ESI:
$response = $this->render("myMainBundle:Esi:home_header_navigation.html.twig");
$response->setPrivate(); //no not cache
return $response;
Локально в режиме отладки моя домашняя страница обслуживается встроенным контентом, но ответ помечается как открытый, даже если включенный фрагмент помечается как закрытый.
Разве это не должно быть частным?
я использую Hinclude (Symfony Docs), так что я могу сделать это
{{ render_hinclude(controller('...')) }}
и иметь разные правила кэширования для каждого маршрута.
Других решений пока нет …