当我将HTTP缓存用于自定义页面时,Symfony2会在缓存文件夹下为其创建一个文件,并且可以为此缓存设置超时。但是,当我更新与该特定页面相关的一些数据库信息时,我的用户无法看到更改(取决于缓存的生命周期)。为了解决这个问题,我想在更新操作中使用该页面的URI删除特定文件,但我不知道该怎么做!。
您是否知道如何使用URI或其他任何方法删除缓存文件以解决此问题?
答案 0 :(得分:1)
对我来说,这是有效的,但我修改了我的环境课程。您必须使用自己的Cache-Path和Enviroment:
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);
}
}