0

我试图让我的 Symfony2 应用程序使用过期模型缓存页面,但它没有正确设置 s-maxage 并且浏览器总是返回 s-maxage=0 无论我将其设置为什么值。

我目前正在使用

public function indexAction()
{
    $response = $this->render('HtgPageBundle:Default:fullPage.html.twig');
    $response->setMaxAge(60);
    $response->setSharedMaxAge(60);

    return $response;
}

我没有设置使用 $response->setPublic(),因为这是使用 setSharedMaxAge() 自动完成的。

我从浏览器得到的响应总是

Cache-Control:max-age=60, public, s-maxage=0
X-Symfony-Cache:GET /page/privacy-policy: miss

但我期待:-

Cache-Control:max-age=60, public, s-maxage=60
X-Symfony-Cache:GET /page/privacy-policy: store

深入研究它,我发现 setSharedMaxAge 被调用了两次,一次是当我像上面那样调用它时,此时它正在设置正确的值。随后,它通过 Symfony\Component\HttpFoundation\Response::setTtl() 方法再次被调用,但这里将值设置为 0 但我不确定它为什么这样做。

我正在使用 Symfony v2.4.4

有什么建议么

4

2 回答 2

0

原来这个问题是由 Sonata Block Bundle 中的事件监听器引入的。您可以通过将以下内容添加到您的 config.yml 文件来禁用对奏鸣曲块捆绑的缓存

sonata_block:
    http_cache:
        listener: false

完整细节 - http://www.mist-labs.com/blog/using-setsharedmaxage-with-httpcache-in-symfony2-always-returns-s-maxage-0

于 2014-06-03T13:23:49.827 回答
0

我刚刚修复它: https ://github.com/sonata-project/SonataBlockBundle/commit/aa963aede9e505b1534e2c5471547f823512da10

所以不再需要禁用监听器。

于 2014-06-13T11:36:27.297 回答