我想在symfony2中使HTTP缓存无效。我使用以下方法:
protected function invalidateCache($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PURGE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $status == 200;
}
有效,没问题。但是当我使用ESI包括我的controller()函数(而不是path())时,如:
{{ render_esi(controller('AcmeDemoBundle:Default:index')) }}
如何获取控制器功能生成的url?或者我如何使该esi请求的缓存响应无效?
答案 0 :(得分:2)
所以这就是你如何做到的:你不是。
我之所以想使用controller()函数代替path(),是因为Symfony会保护来自controller()的URL免受未经授权的请求。你应该做的是使用path()并在URL前加上" esi /"然后保护security.yml中的URL。
//app/config/security.yml
security:
# // ---
access_control:
- { path: ^/esi/.*, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
如果您想清除缓存,只需像往常一样使用网址。
感谢@jongotlin在Twitter上帮助我解决这个问题。