2013-03-24 2 views
1

Когда я использую HTTP-кеш для настраиваемой страницы, Symfony2 создает файл для него в папке с кешем, и можно установить тайм-аут для этого кеша. Но когда я обновляю некоторые данные моей базы данных, связанные с этой конкретной страницей, мои пользователи не могут видеть изменения (в зависимости от срока службы кеша). Чтобы решить эту проблему, я хочу удалить определенный файл в действии обновления с URI этой страницы, но я не знаю, как это сделать !.Удалить кешированный файл для определенного URI

Вы знаете, как удалить кешированный файл с его URI или любым другим способом решить эту проблему?

+1

Читать это http://symfony.com/doc/2.0/book/http_cache.html –

+0

В симфони книге сказал: "Самый стандартный путь к очистите кеш для заданного URL, запросив его специальным методом PURGE HTTP ». но как я могу создать метод HTTP PURGE из моего контроллера symfony? – Developer

ответ

1

Для меня это работает, но я изменил свой класс Enviroment. Вы должны использовать свой собственный кэш-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); 
    } 
} 
Смежные вопросы