如何缓存渲染的控制器?

问题描述 投票:0回答:1

我想缓存渲染的控制器。

我在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秒后才会出现。

我究竟做错了什么?

php symfony
1个回答
0
投票

您需要在应用程序前面安装Varnish或其他缓存网关:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.