我想缓存渲染的控制器。
我在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秒过去了。
我做错了什么?
答案 0 :(得分:0)
您需要在应用程序前面放置__filename
或其他缓存网关:
https://symfony.com/doc/3.4/http_cache/esi.html
......所有这些都在网关缓存级别透明地发生(即在您的应用程序之外)。
...如果您使用esi渲染器(即调用render_esi())并且如果Symfony检测到它正在与支持ESI的网关缓存通信,则会生成ESI包含标记。但是如果没有网关缓存或者它不支持ESI,Symfony将只合并主要内容中包含的页面内容,就像你使用了render()一样。