2

我正在尝试缓存静态内容,我希望该内容的生命周期为一小时并且内容是公开的,对每个人都一样。

我的控制器中有以下代码:

$response = new Response();
$response->setPublic();
$response->setMaxAge(3600);
$response->setSharedMaxAge(3600);

if ($response->isNotModified($request)) {
   return $response;
}

return $this->render(
    'ThemesBundle:Ad:content.html.twig',
     array('context' => $context, 'block' => $block),
     $response
);

但该isNotModified()函数总是返回 false。

PS:我使用的是 Symfony 2.0.22

4

1 回答 1

2

您犯了一个错误,$response->isNotModified($request)仅在使用带有ETagLast-Modified测试的缓存验证时使用!

在这里,您想使用过期方法(使用Cache-ControlExpires)。

所以只需删除这些行:

if ($response->isNotModified($request)) {
   return $response;
}

$response->setMaxAge(3600);(and setSharedMaxAge) 单独完成这项工作,您不需要测试任何东西,框架(或客户端导航器)将为您完成。

将在 3600 秒内提供相同的响应,而不会通过该操作。3600 秒后,用户将重新通过该操作,并将其缓存 3600 秒等。

此外,您可以使用简化读取的@Cache注释;)

于 2013-06-14T11:39:59.830 回答