Symfony2でESIを動作させる手順

自分でも毎回分からなくなるのでメモ・・・。

Actionでは、レスポンスにsetSharedMaxAge()とsetPublic()をセット

<?php
        $response = $this->render('HelloBundle:Hello:index.html.twig', array('rand'=>rand()));
        $response->setSharedMaxAge('10');
        $response->setPublic();
        return $response;

テンプレートでは、standaloneをtrueに

    {% render "HelloBundle:Hello:news" with {}, {'standalone': true} %}

config.ymlでESIを有効に

app.config:
    esi:
        enabled: true

routing.ymlでESI用の_internalルーティングを有効に

_internal:
    resource: @FrameworkBundle/Resources/config/routing/internal.xml
    prefix:   /_internal

ハマるポイントとしては、アクションでレスポンスをsetPublic()しないといけないところでしょうか。これがないとサーバー側でのページキャッシュが有効になりません。