Кэширование ESI в Symfony 3

Я включил ESI в моем приложении Symfony 3, и у меня есть это в app_dev.php:

$kernel = new AppKernel('dev', true);
$kernel = new AppCache($kernel);

Теперь у меня есть config.yml:

framework:
esi: { enabled: true }
fragments: { path: /_fragment }

В моем контроллере:

/**
* @Route("/foo/bar/{fooId}", name="AppBundle_Foo_bar")
*/
public function barAction(int $fooId, Request $request)
{
//some database querying from repositroy
$response = $this->render('AppBundle:Foo:bar.html.twig',['foo' => $foo]);
$response->setETag(md5($response->getContent()));
$response->setPublic();
$response->isNotModified($request);

return $response;
}

Это мнение (bar.html.twig) что я хочу кешировать и выглядит так:

{{foo}}

Теперь у меня есть другой метод, который отображает основной вид.

/**
* @Route("/baz/{fooId}", name="AppBundle_Foo_baz")
* @Template
*/
public function bazAction(int $fooId)
{
return [
'fooId' => $fooId
];
}

И мой baz.html.twig похоже:

{% extends 'AppBundle::layout.html.twig' %}
{% block content %}
{{ render_esi(controller('AppBundle:Foo:bar', { 'fooId': fooId })) }}
{% endblock content %}

Поэтому я хочу иметь в основном не кэшированные представления (баз) и гнезда barAction() внутри и кэшировать.

Но я получил:

Cache-Control:must-revalidate, no-cache, private

даже когда я явно установил его на public, я получил:

X-Symfony-Cache:GET /baz/1: miss;

каждый раз, когда я обновляю страницу и получаю:

GET /_fragment?_hash=aO.....Details: stale, invalid, store

и если я обновлю недействительным становится действительным. Но я не могу установить кеш.

РЕДАКТИРОВАТЬ:

Я читал о ESI и валидации кеша, и кажется, что они не работают вместе. Поэтому я попробовал кэш проверки и добавил

$response->setSharedMaxAge(15);
$response->headers->addCacheControlDirective('must-revalidate', true);

вместо ETag. И все же результат …

5

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]