我想使 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 ()函数(不是路径()),例如:
{{ render_esi(controller('AcmeDemoBundle:Default:index')) }}
如何获取 Controller 函数生成的url?或者如何使该 esi 请求的缓存响应无效?
最佳答案
所以这是你如何做到的:你没有。
我想使用 controller() 函数代替 path() 的原因是因为 Symfony 会保护 URL 从 controller() 免受未经授权的请求。您应该做的是使用 path() 并使用“esi/”作为 URL 前缀,然后在您的 security.yml 中保护该 URL。
//app/config/security.yml
security:
# // ---
access_control:
- { path: ^/esi/.*, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
如果您想清除缓存,您只需像往常一样使用 url。
感谢 Twitter 上的 @jongotlin 帮助我解决这个问题。
关于symfony - 如何使 Controller url 的缓存无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295858/