У меня есть просто действие:
/**
* @Route("/", name="index")
*/
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$news = $em->getRepository('AppBundle:News')->findBy(array('main' => 1));
$response = $this->render('index.html.twig', array('news' => $news));
$response->setSharedMaxAge(3600);
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
Работает хорошо, сайт кешируется, но я бы хотел изменить его в админ-панели в модуле Новости, аннулировать этот кеш и дать всем пользователям увидеть изменения.
/**
* @Route("/admin/save-news", name="admin_save_news")
*/
public function saveNewsAction(Request $request)
{
//...
$em->persist($news);
$em->flush();
//how to invalidate here?
//...
}
Я старался:
protected function invalidateCache($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PURGE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $status == 200;
}
$ url = ‘http://example.com/«;
Но это не работает и, кроме того, странно … Это должно быть лучше
Задача ещё не решена.
Других решений пока нет …