1
當我爲自定義頁面使用HTTP緩存時,Symfony2會在緩存文件夾下爲它創建一個文件,並且可以爲此緩存設置超時。但是,當我更新某些與特定頁面相關的數據庫信息時,我的用戶無法看到更改(取決於緩存的使用時間)。爲了解決這個問題,我想刪除一個特定的文件在更新行動與該網頁的URI,但我不知道該怎麼做!刪除特定URI的緩存文件
你知道如何用它的URI或其他任何方式刪除一個緩存的文件來解決這個問題嗎?
當我爲自定義頁面使用HTTP緩存時,Symfony2會在緩存文件夾下爲它創建一個文件,並且可以爲此緩存設置超時。但是,當我更新某些與特定頁面相關的數據庫信息時,我的用戶無法看到更改(取決於緩存的使用時間)。爲了解決這個問題,我想刪除一個特定的文件在更新行動與該網頁的URI,但我不知道該怎麼做!刪除特定URI的緩存文件
你知道如何用它的URI或其他任何方式刪除一個緩存的文件來解決這個問題嗎?
對我而言,這個工作,但我已經修改了我的環境課。你必須使用你自己的緩存路徑與環境:
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);
}
}
讀它http://symfony.com/doc/2.0/book/http_cache.html – 2013-03-24 08:18:48
在symfony的書說:「最標準的方法是通過請求特定的URL以清除特定URL的緩存「PURGE HTTP方法」。但是我怎樣才能從symfony控制器內部創建一個PURGE HTTP方法? – Developer 2013-03-26 09:09:25