1 关注者

类 yii\filters\PageCache

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

PageCache 实现服务器端整个页面的缓存。

它是一个可以添加到控制器的动作过滤器,并处理 `beforeAction` 事件。

要使用 PageCache,请在控制器类的 `behaviors()` 方法中声明它。在以下示例中,过滤器将应用于 `index` 动作,并将整个页面缓存最多 60 秒,或者直到 post 表中的条目数量发生变化。它还根据应用程序语言存储页面的不同版本。

public function behaviors()
{
    return [
        'pageCache' => [
            'class' => 'yii\filters\PageCache',
            'only' => ['index'],
            'duration' => 60,
            'dependency' => [
                'class' => 'yii\caching\DbDependency',
                'sql' => 'SELECT COUNT(*) FROM post',
            ],
            'variations' => [
                \Yii::$app->language,
            ]
        ],
    ];
}

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$cache yii\caching\CacheInterface|array|string 缓存对象或缓存对象的应用程序组件 ID。 yii\filters\PageCache
$cacheCookies boolean|array 一个布尔值,指示是否缓存所有 cookie,或者是一个 cookie 名称数组,指示哪些 cookie 可以被缓存。 yii\filters\PageCache
$cacheHeaders boolean|array 一个布尔值,指示是否缓存所有 HTTP 头,或者是一个 HTTP 头名称数组(区分大小写),指示哪些 HTTP 头可以被缓存。 yii\filters\PageCache
$dependency array|yii\caching\Dependency 缓存内容依赖的依赖项。 yii\filters\PageCache
$duration integer 数据在缓存中保持有效的秒数。 yii\filters\PageCache
$dynamicPlaceholders array 占位符列表。 yii\base\DynamicContentAwareTrait
$enabled boolean 是否启用页面缓存。 yii\filters\PageCache
$except array 此过滤器不应应用于的操作 ID 列表。 yii\base\ActionFilter
$only array 此过滤器应应用于的操作 ID 列表。 yii\base\ActionFilter
$owner yii\base\Component|null 此行为的拥有者 yii\base\Behavior
$variations string[]|string|callable 导致被缓存内容变化的因素列表。 yii\filters\PageCache
$varyByRoute boolean 是否应根据路由区分被缓存的内容。 yii\filters\PageCache
$view yii\base\View|null 要用于缓存的视图组件。 yii\filters\PageCache

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
addDynamicPlaceholder() 为动态内容添加占位符。 yii\base\DynamicContentAwareTrait
afterAction() 此方法在执行动作后立即调用。 yii\base\ActionFilter
afterFilter() yii\base\ActionFilter
afterRestoreResponse() 此方法在响应恢复完成后(但在发送响应之前)立即调用。 yii\filters\PageCache
attach() 将行为对象附加到组件。 yii\base\ActionFilter
beforeAction() 此方法在要执行操作之前立即调用(在所有可能的过滤器之后)。您可以覆盖此方法来为操作进行最后一分钟的准备。 yii\filters\PageCache
beforeCacheResponse() 此方法在要开始响应缓存之前立即调用。 yii\filters\PageCache
beforeFilter() yii\base\ActionFilter
cacheResponse() 缓存响应属性。 yii\filters\PageCache
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\BaseObject
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\BaseObject
className() 返回此类的完全限定名。 yii\base\BaseObject
detach() 从组件分离行为对象。 yii\base\ActionFilter
events() $owner 的事件声明事件处理程序。 yii\base\Behavior
getDynamicPlaceholders() 返回动态内容的占位符列表。此方法在内部使用以实现内容缓存功能。 yii\base\DynamicContentAwareTrait
getView() yii\filters\PageCache
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\BaseObject
hasProperty() 返回一个值,指示属性是否已定义。 yii\base\BaseObject
init() 初始化对象。 yii\filters\PageCache
setDynamicPlaceholders() 设置动态内容的占位符列表。此方法在内部使用以实现内容缓存功能。 yii\base\DynamicContentAwareTrait

受保护的方法

隐藏继承的方法

方法 描述 定义于
calculateCacheKey() yii\filters\PageCache
getActionId() 通过将 yii\base\Action::$uniqueId 转换为相对于模块的 ID 来返回操作 ID。 yii\base\ActionFilter
isActive() 返回一个值,指示过滤器对于给定操作是否处于活动状态。 yii\base\ActionFilter
restoreResponse() 从给定数据恢复响应属性。 yii\filters\PageCache
updateDynamicContent() 用动态语句的评估结果替换 $content 中的占位符。 yii\base\DynamicContentAwareTrait

常量

隐藏继承的常量

常量 描述 定义于
PAGE_CACHE_VERSION 1 页面缓存版本,用于在缓存数据的格式发生变化时检测缓存值中的不兼容性。 yii\filters\PageCache

属性详细信息

隐藏继承的属性

$cache public property

缓存对象或缓存对象的应用程序组件 ID。在创建 PageCache 对象后,如果您想更改此属性,则应仅用缓存对象为其赋值。从 2.0.2 版本开始,它也可以是用于创建对象的配置数组。

$cacheCookies public property (available since version 2.0.4)

一个布尔值,指示是否缓存所有 cookie,或者是一个 cookie 名称数组,指示哪些 cookie 可以被缓存。非常小心缓存 cookie,因为它可能会将存储在 cookie 中的敏感或私有数据泄露给不希望的用户。

public boolean|array $cacheCookies false
$cacheHeaders 公共属性 (自版本 2.0.4 可用)

一个布尔值,表示是否缓存所有 HTTP 头部,或者是一个 HTTP 头部名称数组(区分大小写),表示哪些 HTTP 头部可以缓存。注意,如果您的 HTTP 头部包含敏感信息,您应该将可以缓存的头部列入白名单。

public boolean|array $cacheHeaders true
$dependency 公共属性

缓存内容依赖的依赖项。这可以是一个 yii\caching\Dependency 对象或一个用于创建依赖项对象的配置数组。例如,

[
    'class' => 'yii\caching\DbDependency',
    'sql' => 'SELECT MAX(updated_at) FROM post',
]

将使输出缓存依赖于所有帖子的最后修改时间。如果任何帖子的修改时间发生变化,则缓存内容将失效。

如果 $cacheCookies$cacheHeaders 启用,则 yii\caching\Dependency::$reusable 也应该启用以节省性能。这是因为 Cookie 和标头目前与实际页面内容分开存储,导致依赖项被评估两次。

$duration 公共属性

数据在缓存中保持有效的时间(秒)。使用 0 表示缓存数据永远不会过期。

public integer $duration 60
$enabled 公共属性

是否启用页面缓存。您可以使用此属性根据特定设置打开和关闭页面缓存(例如,仅对 GET 请求启用页面缓存)。

public boolean $enabled true
$variations 公共属性

导致缓存内容变化的因素列表。每个因素都是一个表示变化的字符串(例如,语言、GET 参数)。以下变体设置将导致内容根据当前应用程序语言以不同版本进行缓存

[
    Yii::$app->language,
]

自版本 2.0.48 起,您可以提供一个匿名函数来生成变体。当您需要访问在 PageCache 行为之前解析的 User 组件时,这特别有用

'variations' => function() {
    return [
        Yii::$app->language,
        Yii::$app->user->id
    ];
}

可调用函数应返回一个数组。

$varyByRoute 公共属性

是否应根据路由区分缓存的内容。路由包含请求的控制器 ID 和操作 ID。默认为 true

public boolean $varyByRoute true
$view 公共属性

用于缓存的视图组件。如果未设置,将使用默认的应用程序视图组件 yii\web\Application::$view

public yii\base\View|null $view null

方法详情

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。

public mixed __call ( $name, $params )
$name string

方法名

$params array

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

当调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现执行两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被重写,建议

  • 构造函数的最后一个参数是一个配置数组,如这里的 $config
  • 在构造函数的末尾调用父实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的名称-值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共方法

定义于: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $object->property; 时会隐式调用。

另见 __set()

public mixed __get ( $name )
$name string

属性名

返回值 mixed

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 yii\base\InvalidCallException

如果属性是只写

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公共方法

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即已定义且不为空。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($object->property) 时会隐式调用。

请注意,如果属性未定义,则将返回 false。

另请参见 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名的属性是否已设置(不为 null)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\BaseObject::__set()

设置对象属性的值。

请勿直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $object->property = $value; 时将隐式调用。

另请参见 __get()

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 yii\base\InvalidCallException

如果属性是只读的

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() 公共方法

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

请勿直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($object->property) 时将隐式调用。

请注意,如果属性未定义,则此方法将不执行任何操作。如果属性是只读的,它将抛出异常。

另请参见 https://php.ac.cn/manual/en/function.unset.php

public void __unset ( $name )
$name string

属性名

抛出 yii\base\InvalidCallException

如果属性是只读的。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
addDynamicPlaceholder() 公共方法

定义于: yii\base\DynamicContentAwareTrait::addDynamicPlaceholder()

为动态内容添加占位符。

此方法在内部使用,以实现内容缓存功能。

public void addDynamicPlaceholder ( $name, $statements )
$name string

占位符名称。

$statements string

用于生成动态内容的 PHP 语句。

                public function addDynamicPlaceholder($name, $statements)
{
    $this->_dynamicPlaceholders[$name] = $statements;
}

            
afterAction() 公共方法

定义于: yii\base\ActionFilter::afterAction()

此方法在执行动作后立即调用。

您可以覆盖此方法,为操作执行一些后期处理。

public mixed afterAction ( $action, $result )
$action yii\base\Action

刚刚执行的操作。

$result mixed

操作执行结果

返回值 mixed

处理后的操作结果。

                public function afterAction($action, $result)
{
    return $result;
}

            
afterFilter() 公共方法
public void afterFilter ( $event )
$event yii\base\ActionEvent

                public function afterFilter($event)
{
    $event->result = $this->afterAction($event->action, $event->result);
    $this->owner->off(Controller::EVENT_AFTER_ACTION, [$this, 'afterFilter']);
}

            
afterRestoreResponse() 公共方法 (从版本 2.0.11 开始可用)

此方法在响应恢复完成后(但在发送响应之前)立即调用。

您可以覆盖此方法,在发送响应之前执行最后一刻的准备工作。

public void afterRestoreResponse ( $data )
$data array|null

存储在缓存条目中的附加数据数组或 null

                public function afterRestoreResponse($data)
{
}

            
attach() 公共方法

定义于: yii\base\ActionFilter::attach()

将行为对象附加到组件。

默认实现将设置 $owner 属性并附加在 events() 中声明的事件处理程序。如果您覆盖此方法,请确保您调用了父实现。

public void attach ( $owner )
$owner yii\base\Component

要附加此行为的组件。

                public function attach($owner)
{
    $this->owner = $owner;
    $owner->on(Controller::EVENT_BEFORE_ACTION, [$this, 'beforeFilter']);
}

            
beforeAction() 公共方法

此方法在要执行操作之前立即调用(在所有可能的过滤器之后)。您可以覆盖此方法来为操作进行最后一分钟的准备。

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

要执行的操作。

返回值 boolean

操作是否应该继续执行。

                public function beforeAction($action)
{
    if (!$this->enabled) {
        return true;
    }
    $this->cache = Instance::ensure($this->cache, 'yii\caching\CacheInterface');
    if (is_array($this->dependency)) {
        $this->dependency = Yii::createObject($this->dependency);
    }
    $response = Yii::$app->getResponse();
    $data = $this->cache->get($this->calculateCacheKey());
    if (!is_array($data) || !isset($data['cacheVersion']) || $data['cacheVersion'] !== static::PAGE_CACHE_VERSION) {
        $this->view->pushDynamicContent($this);
        ob_start();
        ob_implicit_flush(false);
        $response->on(Response::EVENT_AFTER_SEND, [$this, 'cacheResponse']);
        Yii::debug('Valid page content is not found in the cache.', __METHOD__);
        return true;
    }
    $this->restoreResponse($response, $data);
    Yii::debug('Valid page content is found in the cache.', __METHOD__);
    return false;
}

            
beforeCacheResponse() 公共方法 (从版本 2.0.11 开始可用)

此方法在要开始响应缓存之前立即调用。

您可以覆盖此方法,通过返回 false 来取消缓存,或者通过返回数组而不是 true 来在缓存条目中存储附加数据。

public boolean|array beforeCacheResponse ( )
返回值 boolean|array

是否缓存,返回数组而不是 true 来存储附加数据。

                public function beforeCacheResponse()
{
    return true;
}

            
beforeFilter() 公共方法
public void beforeFilter ( $event )
$event yii\base\ActionEvent

                public function beforeFilter($event)
{
    if (!$this->isActive($event->action)) {
        return;
    }
    $event->isValid = $this->beforeAction($event->action);
    if ($event->isValid) {
        // call afterFilter only if beforeFilter succeeds
        // beforeFilter and afterFilter should be properly nested
        $this->owner->on(Controller::EVENT_AFTER_ACTION, [$this, 'afterFilter'], null, false);
    } else {
        $event->handled = true;
    }
}

            
cacheResponse() 公共方法 (从版本 2.0.3 开始可用)

缓存响应属性。

public void cacheResponse ( )

                public function cacheResponse()
{
    $this->view->popDynamicContent();
    $beforeCacheResponseResult = $this->beforeCacheResponse();
    if ($beforeCacheResponseResult === false) {
        echo $this->updateDynamicContent(ob_get_clean(), $this->getDynamicPlaceholders());
        return;
    }
    $response = Yii::$app->getResponse();
    $response->off(Response::EVENT_AFTER_SEND, [$this, 'cacheResponse']);
    $data = [
        'cacheVersion' => static::PAGE_CACHE_VERSION,
        'cacheData' => is_array($beforeCacheResponseResult) ? $beforeCacheResponseResult : null,
        'content' => ob_get_clean(),
    ];
    if ($data['content'] === false || $data['content'] === '') {
        return;
    }
    $data['dynamicPlaceholders'] = $this->getDynamicPlaceholders();
    foreach (['format', 'version', 'statusCode', 'statusText'] as $name) {
        $data[$name] = $response->{$name};
    }
    $this->insertResponseHeaderCollectionIntoData($response, $data);
    $this->insertResponseCookieCollectionIntoData($response, $data);
    $this->cache->set($this->calculateCacheKey(), $data, $this->duration, $this->dependency);
    $data['content'] = $this->updateDynamicContent($data['content'], $this->getDynamicPlaceholders());
    echo $data['content'];
}

            
calculateCacheKey() 受保护的方法 (从版本 2.0.3 开始可用)

protected array calculateCacheKey ( )
返回值 array

用于缓存响应属性的键。

                protected function calculateCacheKey()
{
    $key = [__CLASS__];
    if ($this->varyByRoute) {
        $key[] = Yii::$app->requestedRoute;
    }
    if ($this->variations instanceof Closure) {
        $variations = call_user_func($this->variations, $this);
    } else {
        $variations = $this->variations;
    }
    return array_merge($key, (array) $variations);
}

            
canGetProperty() 公共方法

定义于: yii\base\BaseObject::canGetProperty()

返回一个值,指示是否可以读取属性。

属性是可读的,如果

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

该属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() 公共方法

定义于: yii\base\BaseObject::canSetProperty()

返回一个值,指示是否可以设置属性。

一个属性是可写的,如果

  • 该类具有与指定名称相关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

该属性是否可写

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() 公共静态方法
自 2.0.14 版起已弃用。在 PHP >=5.5 上,请改用 ::class

定义于: yii\base\BaseObject::className()

返回此类的完全限定名。

public static string className ( )
返回值 string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
detach() 公共方法

定义于: yii\base\ActionFilter::detach()

从组件分离行为对象。

默认实现将取消设置 $owner 属性并分离在 events() 中声明的事件处理程序。如果您重写此方法,请确保调用父实现。

public void detach ( )

                public function detach()
{
    if ($this->owner) {
        $this->owner->off(Controller::EVENT_BEFORE_ACTION, [$this, 'beforeFilter']);
        $this->owner->off(Controller::EVENT_AFTER_ACTION, [$this, 'afterFilter']);
        $this->owner = null;
    }
}

            
events() 公共方法

定义于: yii\base\Behavior::events()

$owner 的事件声明事件处理程序。

子类可以覆盖此方法来声明应附加到 $owner 组件事件的 PHP 回调函数。

当行为附加到所有者时,回调函数将附加到 $owner 的事件;当行为从组件分离时,它们将从事件中分离。

回调可以是以下任何一种

  • 此行为中的方法:'handleClick',等效于 [$this, 'handleClick']
  • 对象方法:[$object, 'handleClick']
  • 静态方法:['Page', 'handleClick']
  • 匿名函数:function ($event) { ... }

以下是一个示例

[
    Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
    Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
]
public array events ( )
返回值 array

事件(数组键)和相应的事件处理程序方法(数组值)。

                public function events()
{
    return [];
}

            
getActionId() 受保护方法 (自版本 2.0.7 起可用)

定义于: yii\base\ActionFilter::getActionId()

通过将 yii\base\Action::$uniqueId 转换为相对于模块的 ID 来返回操作 ID。

protected string getActionId ( $action )
$action yii\base\Action

                protected function getActionId($action)
{
    if ($this->owner instanceof Module) {
        $mid = $this->owner->getUniqueId();
        $id = $action->getUniqueId();
        if ($mid !== '' && strpos($id, $mid) === 0) {
            $id = substr($id, strlen($mid) + 1);
        }
    } else {
        $id = $action->id;
    }
    return $id;
}

            
getDynamicPlaceholders() 公共方法

定义于: yii\base\DynamicContentAwareTrait::getDynamicPlaceholders()

返回动态内容的占位符列表。此方法在内部使用以实现内容缓存功能。

public array getDynamicPlaceholders ( )
返回值 array

占位符列表。

                public function getDynamicPlaceholders()
{
    return $this->_dynamicPlaceholders;
}

            
getView() 公共方法

public void getView ( )

                public function getView()
{
    return $this->view;
}

            
hasMethod() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示方法是否已定义。

默认实现是调用 php 函数 method_exists()。当您实现 php 魔术方法 __call() 时,您可以覆盖此方法。

public boolean hasMethod ( $name )
$name string

方法名

返回值 boolean

该方法是否已定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示属性是否已定义。

一个属性是定义的,如果

  • 该类具有与指定名称相关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅

public boolean hasProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

该属性是否已定义

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() 公共方法

初始化对象。

此方法在构造函数结束时调用,在对象使用给定配置初始化后调用。

public void init ( )

                public function init()
{
    parent::init();
    if ($this->view === null) {
        $this->view = Yii::$app->getView();
    }
}

            
isActive() 受保护方法

定义于: yii\base\ActionFilter::isActive()

返回一个值,指示过滤器对于给定操作是否处于活动状态。

protected boolean isActive ( $action )
$action yii\base\Action

正在过滤的操作

返回值 boolean

过滤器对给定操作是否处于活动状态。

                protected function isActive($action)
{
    $id = $this->getActionId($action);
    if (empty($this->only)) {
        $onlyMatch = true;
    } else {
        $onlyMatch = false;
        foreach ($this->only as $pattern) {
            if (StringHelper::matchWildcard($pattern, $id)) {
                $onlyMatch = true;
                break;
            }
        }
    }
    $exceptMatch = false;
    foreach ($this->except as $pattern) {
        if (StringHelper::matchWildcard($pattern, $id)) {
            $exceptMatch = true;
            break;
        }
    }
    return !$exceptMatch && $onlyMatch;
}

            
restoreResponse() 受保护方法 (自版本 2.0.3 起可用)

从给定数据恢复响应属性。

protected void restoreResponse ( $response, $data )
$response yii\web\Response

要恢复的响应。

$data array

响应属性数据。

                protected function restoreResponse($response, $data)
{
    foreach (['format', 'version', 'statusCode', 'statusText', 'content'] as $name) {
        $response->{$name} = $data[$name];
    }
    foreach (['headers', 'cookies'] as $name) {
        if (isset($data[$name]) && is_array($data[$name])) {
            $response->{$name}->fromArray(array_merge($data[$name], $response->{$name}->toArray()));
        }
    }
    if (!empty($data['dynamicPlaceholders']) && is_array($data['dynamicPlaceholders'])) {
        $response->content = $this->updateDynamicContent($response->content, $data['dynamicPlaceholders'], true);
    }
    $this->afterRestoreResponse(isset($data['cacheData']) ? $data['cacheData'] : null);
}

            
setDynamicPlaceholders() 公共方法

定义于: yii\base\DynamicContentAwareTrait::setDynamicPlaceholders()

设置动态内容的占位符列表。此方法在内部使用以实现内容缓存功能。

public void setDynamicPlaceholders ( $placeholders )
$placeholders array

占位符列表。

                public function setDynamicPlaceholders($placeholders)
{
    $this->_dynamicPlaceholders = $placeholders;
}

            
updateDynamicContent() 受保护方法

定义于: yii\base\DynamicContentAwareTrait::updateDynamicContent()

用动态语句的评估结果替换 $content 中的占位符。

protected string updateDynamicContent ( $content, $placeholders, $isRestoredFromCache false )
$content string

要解析的内容。

$placeholders string[]

占位符及其值。

$isRestoredFromCache boolean

内容是否将从缓存中恢复。

返回值 string

最终内容。

                protected function updateDynamicContent($content, $placeholders, $isRestoredFromCache = false)
{
    if (empty($placeholders) || !is_array($placeholders)) {
        return $content;
    }
    if (count($this->getView()->getDynamicContents()) === 0) {
        // outermost cache: replace placeholder with dynamic content
        foreach ($placeholders as $name => $statements) {
            $placeholders[$name] = $this->getView()->evaluateDynamicContent($statements);
        }
        $content = strtr($content, $placeholders);
    }
    if ($isRestoredFromCache) {
        $view = $this->getView();
        foreach ($placeholders as $name => $statements) {
            $view->addDynamicPlaceholder($name, $statements);
        }
    }
    return $content;
}