2

我有一个控制器,其动作在树枝中呈现

{{ render_esi(controller('MyWebsiteBundle:Element:header')) }}

Action 本身如下所示:

/**
     * @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(),以便仅在 MaxAge 过期后渲染 Twig?

4

1 回答 1

4

在 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

于 2015-06-03T08:48:43.393 回答