symfony - 如何使 Controller url 的缓存无效?

标签 symfony caching http-caching 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;
}

那行得通,没问题。但是当我使用 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/

相关文章:

php - Symfony 文件上传和 UploadedFile::getClientSize()

php - Symfony2 将复选框值从 0/1 更改为 'no'/'yes'

php - 为当天剩余时间缓存 PHP 脚本

javascript - 仅当网站发生更改时才设置缓存 header (php、htaccess)

php - Doctrine - ManyToOne 与表之间

html - 对 HTML 或 CSS 进行更改时,它们在页面上不可见

c# - ApiController 的输出缓存(MVC4 Web API)

css - Chrome 不缓存 css 文件。缓存适用于 .js/.png 文件。

c# - 在 ASP.net Web API 中设置 Owin 缓存控制 header

php - 如何从命令行正确运行 php