我正在尝试缓存静态内容,我希望这些内容的生命周期为一小时且内容是公开的,对每个人来说都是一样的。
我的控制器中有以下代码:
$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
答案 0 :(得分:2)
您犯了一个错误,$response->isNotModified($request)
仅在使用validation或ETag测试的缓存Last-Modified时使用!
在这里,您要使用 expiration 方法(Cache-Control或Expires)。
所以只需删除这些行:
if ($response->isNotModified($request)) {
return $response;
}
仅 $response->setMaxAge(3600);
(和setSharedMaxAge
)就可以完成这项工作,你不需要测试任何东西,框架(或客户端导航器)会为你做这件事。
同样的响应将在3600秒内提供,而不会通过操作。 3600秒后,用户将重新通过操作,并将缓存3600秒等。
此外,您可以使用@Cache注释来简化阅读;)