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

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