Symfony2 ESI кеширование + последнее изменение

Я работаю над сайтом symfony2, где мне нужно кэшировать несколько страниц, но некоторые части должны оставаться не кэшированными (например, пользовательское меню и т. Д.). Я проверил документацию, и ESI, похоже, создан именно для этого.

Я начал внедрять кеширование в своем проекте для моей статьи в блоге. Я установил валидацию кеша с последними изменениями и Etag, как предложено в документации Symfony2.

У меня есть пользовательское меню в заголовке всех моих страниц. Это делает с ESI, и я удостоверяюсь, что это не кэширует. Насколько я вижу, это не работает, хотя. Вся моя страница статьи блога кэшируется полностью каждый раз вместе с пользовательским меню. Он сохраняется в кэше браузера и обновляется только тогда, когда я действительно обновляю статью в блоге (что правильно).

Вот мой код для контроллера статьи блога:

public function showAction($slug)
{
$response = new Response();
$response->setETag(md5($response->getContent()));
$date = $article->getModifiedAt();
$response->setLastModified($date);
$response->setPublic();
$response->headers->addCacheControlDirective('must-revalidate', true);
// Check that the Response is not modified for the given Request
if ($response->isNotModified($this->getRequest())) {
    // return the 304 Response immediately
        return $response;
    } else {
    //do stuff
    return  $this->render('NewsBundle:News:show.html.twig', array(
            'article' => $article,
        ),$response); 
}

Мой пользовательский контроллер меню:

public function userMenuAction()
{
$response = new Response();
$response->setSharedMaxAge(0);

return $this->render('MainBundle:Views:userMenu.html.twig', array(
             'user' => $user,
      ),$response);
}

MY ESI маршрутизация

ESI_userMenu:
pattern:  user-menu
defaults: { _locale: en, _controller: MainBundle:Default:userMenu }

ESI рендер:

{% render url('ESI_userMenu') with {}, {'standalone': true} %}

Когда я загружал свою страницу статьи в блоге, я заметил, что пользовательское меню также кэшируется. Я проверил больше и выяснил, не использую ли я isNotModified, но вместо этого установил время жизни, ESI работает.

Есть ли способ заставить ESI работать со структурой isNotModified, которую я использовал для статьи в блоге?

Спасибо

РЕДАКТИРОВАТЬ:

ESI, похоже, не работает с кэшем проверки...

Смотрите здесь: С Symfony2 почему теги ESI внутри кэшированных ответов игнорируются?

1 ответ

Решение

Похоже, что ESI не работает с кэшем проверки, а только с кэшем срока действия. Обратите внимание, что я тестировал в 2.0.23, возможно, проблема решена в более поздних версиях.

С Symfony2 почему теги ESI внутри кэшированных ответов игнорируются?

Другие вопросы по тегам