CHttpCacheFilter
| Пакет | system.web.filters |
|---|---|
| Наследование | class CHttpCacheFilter » CFilter » CComponent |
| Реализует | IFilter |
| С | 1.1.11 |
| Исходный код | framework/web/filters/CHttpCacheFilter.php |
Общественные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| cacheControl | строка | Заголовки управления кэшем HTTP. Установите это значение в пустую строку, чтобы этот заголовок не отправлялся вообще. | CHttpCacheFilter |
| etagSeed | смешанный | Семена для ETag. Может быть любым, что проходит через serialize(). | CHttpCacheFilter |
| etagSeedExpression | строка|обратный вызов | Выражение для семян ETag. | CHttpCacheFilter |
| lastModified | строка|целое | Отметка времени для даты последнего изменения. | CHttpCacheFilter |
| lastModifiedExpression | строка|обратный вызов | PHP-выражение для даты последнего изменения. | CHttpCacheFilter |
Защищенные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| etagValue | строка|логическое | Получает ETag из etagSeedExpression или etagSeed | CHttpCacheFilter |
| lastModifiedValue | целое|логическое | Получает значение последнего изменения из lastModifiedExpression или lastModified | CHttpCacheFilter |
Общественные методы
| Метод | Описание | Определено |
|---|---|---|
| __call() | Вызывает метод с указанным именем, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства нулевым. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в значение null. | CComponent |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Прикрепляет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| detachBehavior() | Открепляет поведение от компонента. | CComponent |
| detachBehaviors() | Открепляет все поведения от компонента. | CComponent |
| detachEventHandler() | Открепляет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединённое поведение. | CComponent |
| disableBehaviors() | Отключает все присоединённые к этому компоненту поведения. | CComponent |
| enableBehavior() | Включает присоединённое поведение. | CComponent |
| enableBehaviors() | Включает все присоединённые к этому компоненту поведения. | CComponent |
| evaluateExpression() | Вычисляет PHP-выражение или обратный вызов в контексте этого компонента. | CComponent |
| filter() | Выполняет фильтрацию. | CFilter |
| getEventHandlers() | Возвращает список прикреплённых обработчиков событий для события. | CComponent |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли присоединённые обработчики для события с указанным именем. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует фильтр. | CFilter |
| preFilter() | Выполняет фильтрацию до действия. | CHttpCacheFilter |
| raiseEvent() | Вызывает событие. | CComponent |
Защищенные методы
| Метод | Описание | Определено |
|---|---|---|
| checkEtag() | Проверяет, соответствует ли полученный клиентом etag сгенерированному | CHttpCacheFilter |
| checkLastModified() | Проверяет, осталась ли дата последнего изменения актуальной | CHttpCacheFilter |
| generateEtag() | Генерирует строку с кавычками из семян | CHttpCacheFilter |
| getEtagValue() | Получает ETag из etagSeedExpression или etagSeed | CHttpCacheFilter |
| getLastModifiedValue() | Получает значение последнего изменения из lastModifiedExpression или lastModified | CHttpCacheFilter |
| postFilter() | Выполняет фильтрацию после действия. | CFilter |
| send304Header() | Отправляет HTTP-код состояния 304 клиенту | CHttpCacheFilter |
| sendCacheControlHeader() | Отправляет заголовок управления кэшем клиенту | CHttpCacheFilter |
Подробное описание свойств
cacheControl свойство
public string $cacheControl;
Заголовки управления кэшем HTTP. Установите это значение в пустую строку, чтобы этот заголовок не отправлялся вообще.
etagSeed свойство
public mixed $etagSeed;
Семена для ETag. Может быть любым, что проходит через serialize().
etagSeedExpression свойство
public string|callback $etagSeedExpression;
Выражение для начального значения ETag. Если установлено, оно имеет приоритет перед etagSeed.
PHP-выражение будет вычислено с помощью evaluateExpression.
PHP-выражение может быть любым PHP-кодом, который имеет значение. Для получения дополнительной информации о том, что такое выражение, обратитесь к руководству по PHP.
etagValue свойство только для чтения
protected string|boolean getEtagValue()
Получает значение ETag из etagSeedExpression или etagSeed
lastModified свойство
public string|integer $lastModified;
Отметка времени для даты последнего изменения. Должно быть либо строкой, распознаваемой функцией strtotime(), либо целым числом, представляющим метку времени Unix.
lastModifiedExpression свойство
public string|callback $lastModifiedExpression;
PHP-выражение для даты последнего изменения. Если установлено, оно имеет приоритет перед lastModified.
PHP-выражение будет вычислено с помощью evaluateExpression.
PHP-выражение может быть любым PHP-кодом, который имеет значение. Для получения дополнительной информации о том, что такое выражение, обратитесь к руководству по PHP.
lastModifiedValue свойство только для чтения
protected integer|boolean getLastModifiedValue()
Получает значение последнего изменения из lastModifiedExpression или lastModified и преобразует его в метку времени Unix, если необходимо.
Подробное описание методов
checkEtag() метод
protected boolean checkEtag(string $etag) | ||
| $etag | string | переданное значение etag |
| {return} | boolean | true, если переданное значение etag совпадает с $etag |
protected function checkEtag($etag)
{
return isset($_SERVER['HTTP_IF_NONE_MATCH'])&&$_SERVER['HTTP_IF_NONE_MATCH']==$etag;
}
Проверяет, совпадает ли значение etag, переданное клиентом, с сгенерированным нами
checkLastModified() метод
protected boolean checkLastModified(integer $lastModified) | ||
| $lastModified | integer | дата последнего изменения |
| {return} | boolean | true, если дата последнего изменения, переданная клиентом, более новая или равна $lastModified |
protected function checkLastModified($lastModified)
{
return isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])&&@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])>=$lastModified;
}
Проверяет, актуальна ли дата последнего изменения, переданная клиентом.
generateEtag() метод
protected string generateEtag(mixed $seed) | ||
| $seed | mixed | Начальное значение для ETag |
| {return} | string | Строка в кавычках, используемая в качестве ETag |
protected function generateEtag($seed)
{
return '"'.base64_encode(sha1(serialize($seed),true)).'"';
}
Генерирует строку в кавычках на основе начального значения.
getEtagValue() метод
protected string|boolean getEtagValue() | ||
| {return} | string|boolean | Строка в кавычках, используемая в качестве ETag, или false, если ни etagSeed, ни etagSeedExpression не установлены |
protected function getEtagValue()
{
if($this->etagSeedExpression)
return $this->generateEtag($this->evaluateExpression($this->etagSeedExpression));
elseif($this->etagSeed)
return $this->generateEtag($this->etagSeed);
return false;
}
Получает значение ETag из etagSeedExpression или etagSeed
getLastModifiedValue() метод
protected integer|boolean getLastModifiedValue() | ||
| {return} | integer|boolean | Метка времени Unix или false, если ни lastModified, ни lastModifiedExpression не установлены |
protected function getLastModifiedValue()
{
if($this->lastModifiedExpression)
{
$value=$this->evaluateExpression($this->lastModifiedExpression);
if(is_numeric($value)&&$value==(int)$value)
return $value;
elseif(($lastModified=strtotime($value))===false)
throw new CException(Yii::t('yii','Invalid expression for CHttpCacheFilter.lastModifiedExpression: The evaluation result "{value}" could not be understood by strtotime()',
array('{value}'=>$value)));
return $lastModified;
}
if($this->lastModified)
{
if(is_numeric($this->lastModified)&&$this->lastModified==(int)$this->lastModified)
return $this->lastModified;
elseif(($lastModified=strtotime($this->lastModified))===false)
throw new CException(Yii::t('yii','CHttpCacheFilter.lastModified contained a value that could not be understood by strtotime()'));
return $lastModified;
}
return false;
}
Получает значение последнего изменения из lastModifiedExpression или lastModified и преобразует его в метку времени Unix, если необходимо.
preFilter() метод
public boolean preFilter(CFilterChain $filterChain) | ||
| $filterChain | CFilterChain | цепочка фильтров, на которой находится фильтр. |
| {return} | boolean | должен ли процесс фильтрации продолжаться и действие должно быть выполнено. |
public function preFilter($filterChain)
{
// Only cache GET and HEAD requests
if(!in_array(Yii::app()->getRequest()->getRequestType(), array('GET', 'HEAD')))
return true;
$lastModified=$this->getLastModifiedValue();
$etag=$this->getEtagValue();
if($etag===false&&$lastModified===false)
return true;
if($etag)
header('ETag: '.$etag);
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])&&isset($_SERVER['HTTP_IF_NONE_MATCH']))
{
if($this->checkLastModified($lastModified)&&$this->checkEtag($etag))
{
$this->send304Header();
$this->sendCacheControlHeader();
return false;
}
}
elseif(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
if($this->checkLastModified($lastModified))
{
$this->send304Header();
$this->sendCacheControlHeader();
return false;
}
}
elseif(isset($_SERVER['HTTP_IF_NONE_MATCH']))
{
if($this->checkEtag($etag))
{
$this->send304Header();
$this->sendCacheControlHeader();
return false;
}
}
if($lastModified)
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lastModified).' GMT');
$this->sendCacheControlHeader();
return true;
}
Выполняет фильтрацию перед выполнением действия.
send304Header() метод
protected void send304Header() |
protected function send304Header()
{
$httpVersion=Yii::app()->request->getHttpVersion();
header("HTTP/$httpVersion 304 Not Modified");
}
Отправляет клиенту HTTP-код состояния 304
sendCacheControlHeader() метод (доступен с версии v1.1.12)
protected void sendCacheControlHeader() |
protected function sendCacheControlHeader()
{
if(Yii::app()->session->isStarted)
{
session_cache_limiter('public');
header('Pragma:',true);
}
header('Cache-Control: '.$this->cacheControl,true);
}
Отправляет заголовки управления кэшем клиенту
См. также
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CHttpCacheFilter