2013-03-24 3 views
1

사용자 정의 페이지에 HTTP 캐시를 사용하면 Symfony2가 캐시 폴더 아래에 파일을 만들고이 캐시에 대한 시간 초과를 설정할 수 있습니다. 그러나 특정 페이지와 관련된 일부 데이터베이스 정보를 업데이트하면 사용자가 캐시 수명에 따라 변경 사항을 볼 수 없습니다. 이 문제를 해결하기 위해 해당 페이지의 URI로 업데이트 작업에서 특정 파일을 삭제하려고하지만 어떻게 해야할지 모릅니다!.특정 URI에 대한 캐쉬 파일 삭제

캐시 된 파일을 URI 또는 ​​다른 방법으로 삭제하여이 문제를 해결하는 방법을 알고 계십니까?

+1

읽기는 온라인 문서에서 –

+0

말했다 http://symfony.com/doc/2.0/book/http_cache.html : "가장 표준 방법이다 특정 URL에 대해 캐시를 지우려면 PURGE HTTP 메소드를 사용하여 캐시를 요청하십시오. " 하지만 symfony 컨트롤러 내부에서 PURGE HTTP 메서드를 만들려면 어떻게해야합니까? – Developer

답변

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); 
    } 
}