2013-03-24 118 views
1

当我为自定义页面使用HTTP缓存时,Symfony2会在缓存文件夹下为它创建一个文件,并且可以为此缓存设置超时。但是,当我更新某些与特定页面相关的数据库信息时,我的用户无法看到更改(取决于缓存的使用时间)。为了解决这个问题,我想删除一个特定的文件在更新行动与该网页的URI,但我不知道该怎么做!删除特定URI的缓存文件

你知道如何用它的URI或其他任何方式删除一个缓存的文件来解决这个问题吗?

+1

读它http://symfony.com/doc/2.0/book/http_cache.html – 2013-03-24 08:18:48

+0

在symfony的书说:“最标准的方法是通过请求特定的URL以清除特定URL的缓存“PURGE HTTP方法”。但是我怎样才能从symfony控制器内部创建一个PURGE HTTP方法? – Developer 2013-03-26 09:09:25

回答

1

对我而言,这个工作,但我已经修改了我的环境课。你必须使用你自己的缓存路径与环境:

private function clearCache($slug) 
{ 
    global $kernel; 
    if (get_class($kernel) == 'AppCache') { 
     $key = 'md' . hash('sha256', ($_SERVER['SERVER_PORT'] == 80 ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . '/' . $slug); 
     $cacheMdFileName = \Environment::instance()->getCachePath() . '/' . $kernel->getKernel()->getEnvironment() . DIRECTORY_SEPARATOR . 'http_cache' . DIRECTORY_SEPARATOR . substr($key, 0, 2) . DIRECTORY_SEPARATOR . substr($key, 2, 2) . DIRECTORY_SEPARATOR . substr($key, 4, 2) . DIRECTORY_SEPARATOR . substr($key, 6); 
     $file = file_get_contents($cacheMdFileName); 
     $key = unserialize($file)[0][1]['x-content-digest'][0]; 
     $cacheEnFileName = \Environment::instance()->getCachePath() . '/' . $kernel->getKernel()->getEnvironment() . DIRECTORY_SEPARATOR . 'http_cache' . DIRECTORY_SEPARATOR . substr($key, 0, 2) . DIRECTORY_SEPARATOR . substr($key, 2, 2) . DIRECTORY_SEPARATOR . substr($key, 4, 2) . DIRECTORY_SEPARATOR . substr($key, 6); 

     unlink($cacheMdFileName); 
     unlink($cacheEnFileName); 
    } 
}