如何缓存渲染的控制器?

时间:2018-01-04 11:26:54

标签: php symfony

我想缓存渲染的控制器。

我在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秒过去了。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要在应用程序前面放置__filename或其他缓存网关:

https://symfony.com/doc/3.4/http_cache/esi.html

  

......所有这些都在网关缓存级别透明地发生(即在您的应用程序之外)。

     

...如果您使用esi渲染器(即调用render_esi())并且如果Symfony检测到它正在与支持ESI的网关缓存通信,则会生成ESI包含标记。但是如果没有网关缓存或者它不支持ESI,Symfony将只合并主要内容中包含的页面内容,就像你使用了render()一样。