Symfony2: ESI setMaxAge Cache
У меня есть контроллер, действие которого отображается в ветке с
{{ render_esi(controller('MyWebsiteBundle:Element:header')) }}
Само действие выглядит так:
/**
* @return Response
*/
public function headerAction()
{
$currentLocale = $this->getCurrentLocale();
$response = $this->render('MyWebsiteBundle:Element:header.html.twig', array(
'currentLocale' => $currentLocale,
'myTime' => time()
));
$response->setPublic();
$response->setSharedMaxAge(3600);
return $response;
}
Когда я перезагружаю свой браузер, "myTime"
меняется каждый раз.
Как я могу использовать setShardeMaxAge()
, так что Twig отображается только после истечения MaxAge?
1 ответ
В Symfony2 есть несколько вещей, которые нужно сделать, чтобы активировать ESI-кэширование.
1) В app/config/config.yml
убедитесь, что вы активировали ESI, с путем фрагментов.
framework:
esi: { enabled: true }
fragments: { path: /_proxy }
2) Обернуть ядро объектом AppCache
// web/app.php
$kernel = new AppCache($kernel);
3) Настройте конфигурацию AppCache
// app/AppCache.php
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
class AppCache extends HttpCache
{
protected function getOptions()
{
return array(
'debug' => false,
'default_ttl' => 0,
'private_headers' => array('Authorization', 'Cookie'),
'allow_reload' => false,
'allow_revalidate' => false,
'stale_while_revalidate' => 2,
'stale_if_error' => 60,
);
}
}
О вашей проблеме, если она кэширует ваш ответ, и единственная проблема заключается в том, что она перезагружается при каждом обновлении страницы. убедитесь, что конфигурация allow_reload
свойство имеет значение false.
Вы можете прочитать больше об этом здесь: http://symfony.com/doc/current/book/http_cache.html