如何使控制器URL的缓存无效?

Tob*_*olm 5 caching http-caching symfony esi

我想在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;
}
Run Code Online (Sandbox Code Playgroud)

这工作,没问题.但是当我使用ESI包括我的controller()函数(而不是path())时:

{{ render_esi(controller('AcmeDemoBundle:Default:index')) }}
Run Code Online (Sandbox Code Playgroud)

如何获取控制器功能生成的URL?或者我如何使该esi请求的缓存响应无效?

Tob*_*olm 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 }
Run Code Online (Sandbox Code Playgroud)

如果您想清除缓存,只需像平常一样使用 url 即可。

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