我想缓存渲染的控制器。
我在Symfony 3中有项目,我发现它:https://symfony.com/doc/3.4/http_cache/esi.html
我有:
framework:
# ...
esi: { enabled: true }
fragments: { path: /_fragment }
在控制器中:
public function infoAction($maxPerPage)
{
$em = $this->getDoctrine()->getManager();
$info = $em->getRepository(Info::class)->find(1);
$response = $this->render('info.html.twig', [info => $info]);
$response->setSharedMaxAge(600);
return $response;
}
在模板中:
{{ render_esi(controller('AppBundle:News:info')) }}
我没有任何错误,一切都很好,但是没有缓存...如果我更改数据库中的数据,它们会立即显示在页面上,并且在600秒后才会出现。
我究竟做错了什么?
您需要在应用程序前面安装Varnish
或其他缓存网关:
https://symfony.com/doc/3.4/http_cache/esi.html
...所有这些都在网关缓存级别(即应用程序之外)透明地发生。
...如果您使用esi渲染器(即调用render_esi()),并且如果Symfony检测到它正在与支持ESI的网关缓存通信,则会生成ESI包含标记。但是如果没有网关缓存或者它不支持ESI,Symfony将只合并包含在主要内容中的页面内容,就像你使用了render()一样。