Spec-Zone.ru › Yii 1.1

CHttpCacheFilter

Пакет system.web.filters
Наследование class CHttpCacheFilter » CFilter » CComponent
Реализует IFilter
С 1.1.11
Исходный код framework/web/filters/CHttpCacheFilter.php
CHttpCacheFilter реализует кэширование HTTP. Он работает очень похоже на COutputCache как фильтр, за исключением того, что кэширование содержимого выполняется на стороне клиента.

Общественные свойства

Свойство Тип Описание Определено
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
Исходный код: framework/web/filters/CHttpCacheFilter.php#163 (показать)
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
Исходный код: framework/web/filters/CHttpCacheFilter.php#173 (показать)
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
Исходный код: framework/web/filters/CHttpCacheFilter.php#207 (показать)
protected function generateEtag($seed)
{
    return 
'"'.base64_encode(sha1(serialize($seed),true)).'"';
}

Генерирует строку в кавычках на основе начального значения.

getEtagValue() метод

protected string|boolean getEtagValue()
{return} string|boolean Строка в кавычках, используемая в качестве ETag, или false, если ни etagSeed, ни etagSeedExpression не установлены
Исходный код: framework/web/filters/CHttpCacheFilter.php#149 (показать)
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 не установлены
Исходный код: framework/web/filters/CHttpCacheFilter.php#121 (показать)
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 должен ли процесс фильтрации продолжаться и действие должно быть выполнено.
Исходный код: framework/web/filters/CHttpCacheFilter.php#63 (показать)
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()
Исходный код: framework/web/filters/CHttpCacheFilter.php#181 (показать)
protected function send304Header()
{
    
$httpVersion=Yii::app()->request->getHttpVersion();
    
header("HTTP/$httpVersion 304 Not Modified");
}

Отправляет клиенту HTTP-код состояния 304

sendCacheControlHeader() метод (доступен с версии v1.1.12)

protected void sendCacheControlHeader()
Исходный код: framework/web/filters/CHttpCacheFilter.php#192 (показать)
protected function sendCacheControlHeader()
{
    if(
Yii::app()->session->isStarted)
    {
        
session_cache_limiter('public');
        
header('Pragma:',true);
    }
    
header('Cache-Control: '.$this->cacheControl,true);
}

Отправляет заголовки управления кэшем клиенту

См. также

  • cacheControl

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CHttpCacheFilter

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API