2011-07-13 11 views
5

Necesito configurar algunos encabezados HTTP "Caduca", "Cache-Control", "Last-Modified", para recursos como archivos CSS, archivos de imágenes, archivos js, , etc. (contenido Webroot).Cómo almacenar en caché contenido estático (css, images, js) en CakePHP2?

He leído que hay algo de funcionalidad, a través de

Configure::write('Asset.timestamp', true); // In core.php 

y el método assetTimestamp de la Clase auxiliar.

Ahora, la pregunta es: ¿Cómo se usa?

He leído el código HtmlHelper y en el método css, la línea 361 está esto:

$url = $this->assetTimestamp($this->webroot($path)); 
+0

Para los Bakers de Google para "Especificar una caducidad de al menos una semana en el futuro para los siguientes recursos" – givanse

Respuesta

11

resuelto.

En primer lugar, debe considerar realizarlo a través de Apache. Puede echar un vistazo a esta guía: http://httpd.apache.org/docs/2.2/caching.html

El problema es que CakePHP tiene un método para hacerlo. Y es bastante bueno.

Explicaré esto para los archivos CSS. Por supuesto también se puede usar para contenido JS.

1) En el archivo core.php (en app/config /) descomentar esta línea:

Configure::write('Asset.filter.css', 'css.php'); 

Esa línea dice a CakePHP para encaminar todas las solicitudes a archivos CSS a través de ese guión "css.php" . Como su nombre lo indica, es un filtro. Ahí podemos hacer lo que queramos.

2) Cree ese archivo "css.php". Tienes que crearlo en la aplicación/webroot/

Realiza allí, puedes tomar el archivo que Browsen está solicitando y aplicar algunos encabezados HTTP de caché.

Algo así como:

$filepath = CSS . $regs[1]; //There are some variables that are can be used in this script, take a look to de docs. 

$output = file_get_contents($filepath); 
header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT'); 
header("Content-Type: text/css"); 
header("Expires: " . gmdate("D, d M Y H:i:s", time() + DAY) . " GMT"); //WEEK or MONTH are valid as well 
header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1 
header("Pragma: cache");  // HTTP/1.0 
print $output; 

eso es todo! Allí su contenido se servirá con los encabezados especificados y el navegador sabrá que puede almacenarlos en caché.

Tome un vistazo a:

http://www.bunchacode.com/programming/get-cakephp-build-in-css-compression-to-work/

Hay una buena versión de css.php que también minfies ella.

+2

Podemos hacer js y css con esto. ¿Cómo podemos agregar el encabezado de expirar a las imágenes? –

Cuestiones relacionadas