HttpCacheServiceProvider

El proveedor HttpCacheProvider proporciona compatibilidad para el delegado inverso de Symfony2.

Parámetros

  • http_cache.cache_dir: El directorio de caché para almacenar los datos de la caché HTTP.
  • http_cache.options (opcional): Un arreglo de opciones para el constructor de HttpCache.

Servicios

Registrando

$app->register(new Silex\Provider\HttpCacheServiceProvider(), array(
    'http_cache.cache_dir' => __DIR__.'/cache/',
));

Uso

Silex, fuera de la caja, ya es compatible con cualquier delegado inverso como Varnish ajustando las cabeceras de caché HTTP de la Respuesta:

use Symfony\Component\HttpFoundation\Response;

$app->get('/', function() {
    return new Response('Foo', 200, array(
        'Cache-Control' => 's-maxage=5',
    ));
});

Truco

Si quieres que Silex confíe en las cabeceras X-Forwarded-For* de tu servidor delegado inverso, tendrás que ejecutar tu aplicación de la siguiente manera:

use Symfony\Component\HttpFoundation\Request;

Request::trustProxyData();
$app->run();

Este proveedor te permite utilizar el delegado inverso nativo de Symfony2 con aplicaciones Silex usando el servicio http_cache:

$app['http_cache']->run();

El proveedor también ofrece compatibilidad con ESI:

$app->get('/', function() {
    $response = new Response(<<<EOF
<html>
    <body>
        Hello
        <esi:include src="/included" />
    </body>
</html>

EOF
    , 200, array(
        'Surrogate-Control' => 'content="ESI/1.0"',
    ));

    $response->setTtl(20);

    return $response;
});

$app->get('/included', function() {
    $response = new Response('Foo');
    $response->setTtl(5);

    return $response;
});

$app['http_cache']->run();

Truco

Para ayudarte a depurar cuestiones con el almacenamiento en caché, ajusta a true la opción debug de tu aplicación. Symfony automáticamente añade una cabecera X-Symfony-Cache a cada respuesta con útil información sobre el acceso exitoso y fallido a la caché.

Si no estás utilizando el proveedor de Sesión de Symfony, podrías querer poner la opción session.cache_limiter de PHP a un valor vacío para evitar el comportamiento predefinido de PHP.

Finalmente, comprueba que tu servidor Web no redefine la estrategia de almacenamiento en caché.

Para más información, consulta la documentación de la caché HTTP de Symfony2.

Bifúrcame en GitHub