Мне нужно установить некоторые HTTP-заголовки «Expires», «Cache-Control», «Last-Modified», для ресурсов в виде файлов CSS, файлов изображений, js-файлов и т. Д. (Содержимое Webroot).
Я читал, что есть некоторые функции, через
Configure::write('Asset.timestamp', true); // In core.php
и метод assetTimestamp класса Helper.
Теперь вопрос: как он используется?
Я прочитал код HtmlHelper и в методе css, строка 361:
$url = $this->assetTimestamp($this->webroot($path));
Решаемые.
Прежде всего, вы должны рассмотреть возможность сделать это через Apache. Вы можете посмотреть это руководство: http://httpd.apache.org/docs/2.2/caching.html
Дело в том, что у CakePHP есть способ сделать это. И это очень хорошо.
Я объясню это для файлов CSS. Конечно, можно использовать и для контента JS.
1) В вашем файле core.php (в приложении / config /) раскомментируйте эту строку:
Configure::write('Asset.filter.css', 'css.php');
Эта строка указывает CakePHP направить все запросы к файлам CSS с помощью этого сценария «css.php». Как следует из названия, это фильтр. Там мы можем делать все, что захотим.
2) Создайте этот файл css.php. Вы должны создать его под именем app / webroot /
Сделайте там, вы можете взять файл, который запрашивает браузер, и применить некоторые кеширующие HTTP-заголовки.
Что-то вроде:
$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 MYG:i:s ", $templateModified) . 'GMT'); header("Content-Type: text/css"); header("Expires: " . gmdate("D, d MYH: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;
Это оно! Там ваш контент будет обслуживаться с указанными заголовками, и браузер узнает, что может их кэшировать.
Взгляни на:
http://www.bunchacode.com/programming/get-cakephp-build-in-css-compression-to-work/
Есть хорошая версия css.php, которая также минимизирует ее.