5

我想使 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 请求的缓存响应无效?

4

1 回答 1

2

所以这就是你的做法:你没有。

我想使用 controller() 函数而不是 path() 的原因是因为 Symfony 将保护 URL 免受来自 controller() 的未经授权的请求。您应该做的是使用 path() 并在 URL 前加上“esi/”,然后在 security.yml 中保护该 URL。

//app/config/security.yml
security: 
  # // ---
  access_control:
    - { path: ^/esi/.*, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }

如果要清除缓存,只需像往常一样使用 url。

感谢 Twitter 上的 @jongotlin 帮助我解决这个问题。

于 2014-03-24T14:29:44.230 回答