Class yii\filters\HttpCache

继承yii\filters\HttpCache » yii\base\ActionFilter » yii\base\Behavior » yii\base\BaseObject
实现yii\base\Configurable
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/filters/HttpCache.php

HttpCache 通过使用Last-ModifiedETag HTTP 标头来实现客户端缓存.

它是一个动作过滤器, 可以添加到控制器并处理beforeAction事件. 要使用 HttpCache, 请在控制器类的behaviors()方法中对其进行声明.

在下面的示例中, 过滤器将应用于index动作, 而Last-Modified标头将包含对数据库中用户表的最后更新日期.

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['index'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('user')->max('updated_at');
            },
//            'etagSeed' => function ($action, $params) {
//                return // generate ETag seed here
//            }
        ],
    ];
}

公共属性

隐藏继承的属性

属性类型描述定义在
$cacheControlHeader string Cache-Control HTTP 头的值. yii\filters\HttpCache
$enabled boolean 指示是否应启用此过滤器的值. yii\filters\HttpCache
$etagSeed callable 一个生成 ETag 种子字符串的 PHP 回调函数. yii\filters\HttpCache
$except array 此过滤器不适用的动作ID列表, 列表中的动作将不被过滤. yii\base\ActionFilter
$lastModified callable 一个返回最后修改时间的 UNIX 时间戳的 PHP 回调. yii\filters\HttpCache
$only array 此过滤器应适用的动作ID列表, 仅列表中的动作被过滤. yii\base\ActionFilter
$owner yii\base\Component|null 该行为的所有者. yii\base\Behavior
$params mixed 应传递给 $lastModified$etagSeed 回调的其它参数. yii\filters\HttpCache
$sessionCacheLimiter string 当调用session_cache_limiter()时要设置的缓存限制器的名称. yii\filters\HttpCache
$weakEtag boolean 是否生成弱 ETags. yii\filters\HttpCache

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\BaseObject
__set() 设置对象属性的值. yii\base\BaseObject
__unset() 将对象属性设置为null. yii\base\BaseObject
afterAction() 执行动作后立即调用此方法. yii\base\ActionFilter
afterFilter() yii\base\ActionFilter
attach() 将行为对象附加到组件. yii\base\ActionFilter
beforeAction() 在执行动作之前(在所有可能的过滤器之后)立即调用该方法. yii\filters\HttpCache
beforeFilter() yii\base\ActionFilter
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
className() 返回此类的完全限定名称. yii\base\BaseObject
detach() 从组件中分离行为对象. yii\base\ActionFilter
events() 声明 所有者 事件的事件处理程序. yii\base\Behavior
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\BaseObject
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\BaseObject
init() 初始化对象. yii\base\BaseObject

受保护的方法

隐藏继承的方法

方法描述定义在
generateEtag() 从给定的种子字符串生成一个 ETag. yii\filters\HttpCache
getActionId() 通过将 yii\base\Action::$uniqueId 转换为相对于模块的ID来返回动作ID. yii\base\ActionFilter
isActive() 返回一个值, 指示过滤器对于给定动作是否处于活动状态. yii\base\ActionFilter
sendCacheControlHeader() 将缓存控制表头发送到客户端. yii\filters\HttpCache
validateCache() 验证 HTTP 缓存是否包含有效内容. yii\filters\HttpCache

属性详情

$cacheControlHeader public 属性

Cache-Control HTTP 头的值. 如果为null, 则不会发送标头.

参见 http://tools.ietf.org/html/rfc2616#section-14.9.

public string $cacheControlHeader 'public, max-age=3600'
$enabled public 属性

指示是否应启用此过滤器的值.

public boolean $enabled true
$etagSeed public 属性

一个生成 ETag 种子字符串的 PHP 回调函数.

回调的签名应该是:

function ($action, $params)

其中$action是此过滤器当前正在处理的 yii\base\Action 对象; $params的值为 $params. 该回调应返回一个字符串, 用于生成 ETag 的种子.

public callable $etagSeed null
$lastModified public 属性

一个返回最后修改时间的 UNIX 时间戳的 PHP 回调.

回调的签名应该是:

function ($action, $params)

其中$action是此过滤器当前正在处理的 yii\base\Action 对象; $params的值为 $params. 该回调应返回一个 UNIX 时间戳.

参见 http://tools.ietf.org/html/rfc7232#section-2.2.

public callable $lastModified null
$params public 属性

应传递给 $lastModified$etagSeed 回调的其它参数.

public mixed $params null
$sessionCacheLimiter public 属性

当调用session_cache_limiter()时要设置的缓存限制器的名称.

默认值为空字符串, 表示完全关闭自动发送缓存头的功能.

你可以将此属性设置为public, private, private_no_expirenocache.

有关这些值的详细说明, 请参阅 session_cache_limiter().

如果该属性为null, 则不会调用session_cache_limiter(). 结果是, PHP 将根据session.cache_limiter PHP ini 设置发送标头.

$weakEtag public 属性 (可用自版本: 2.0.8)

是否生成弱 ETags.

如果内容应语义上是等效的, 但不是字节相等, 则应使用弱 ETags.

参见 http://tools.ietf.org/html/rfc7232#section-2.3.

public boolean $weakEtag false

方法详情

beforeAction() public 方法

在执行动作之前(在所有可能的过滤器之后)立即调用该方法.

你可以重写此方法以为动作做最后准备.

public boolean beforeAction ( $action )
$action yii\base\Action

要执行的动作.

return boolean

该动作是否应该继续执行.

generateEtag() protected 方法

从给定的种子字符串生成一个 ETag.

protected string generateEtag ( $seed )
$seed string

ETag 的种子.

return string

生成的 ETag.

sendCacheControlHeader() protected 方法

将缓存控制表头发送到客户端.

参见 $cacheControlHeader.

protected void sendCacheControlHeader ( )
validateCache() protected 方法

验证 HTTP 缓存是否包含有效内容.

如果 Last-Modified 和 ETag 均为null, 则返回false.

protected boolean validateCache ( $lastModified, $etag )
$lastModified integer

根据 UNIX 时间戳计算出的 Last-Modified 值. 如果为null, 则不会验证 Last-Modified 标头 Last-Modified.

$etag string

计算出的 ETag 值. 如果为null, 则不会验证 ETag 标头.

return boolean

HTTP 缓存是否仍然有效.