0 关注者

类 yii\rest\Serializer

继承关系yii\rest\Serializer » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/rest/Serializer.php

序列化器将资源对象和集合转换为数组表示形式。

序列化器主要由 REST 控制器使用,将不同的对象转换为数组表示形式,以便它们可以进一步转换为不同的格式,例如 JSON、XML,通过响应格式化程序。

默认实现将资源处理为 yii\base\Model 对象,并将集合处理为实现 yii\data\DataProviderInterface 的对象。您可以覆盖 serialize() 来处理更多类型。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$collectionEnvelope string|null 用于返回集合中资源对象的信封的名称(例如 items)。 yii\rest\Serializer
$currentPageHeader string 包含有关当前页码(从 1 开始)的信息的 HTTP 标头的名称。 yii\rest\Serializer
$expandParam string 包含有关除了 $fieldsParam 中列出的字段外,还应为资源对象返回哪些字段的信息的查询参数的名称。 yii\rest\Serializer
$fieldsParam string 包含有关应为 yii\base\Model 对象返回哪些字段的信息的查询参数的名称。 yii\rest\Serializer
$linksEnvelope string 用于返回链接对象的信封的名称(例如 _links)。 yii\rest\Serializer
$metaEnvelope string 用于返回分页对象的信封的名称(例如 _meta)。 yii\rest\Serializer
$pageCountHeader string 包含有关数据总页数的信息的 HTTP 标头的名称。 yii\rest\Serializer
$perPageHeader string 包含有关每页数据项数量的信息的 HTTP 标头的名称。 yii\rest\Serializer
$preserveKeys boolean 在序列化集合数据时是否保留数组键。 yii\rest\Serializer
$request yii\web\Request|null 当前请求。 yii\rest\Serializer
$response yii\web\Response|null 要发送的响应。 yii\rest\Serializer
$totalCountHeader string 包含有关数据项总数的信息的 HTTP 标头的名称。 yii\rest\Serializer

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在对象通过克隆现有对象创建后调用。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
behaviors() 返回此组件应作为其行为表现的行为列表。 yii\base\Component
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
className() 返回此类的完全限定名称。 yii\base\BaseObject
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
ensureBehaviors() 确保 behaviors() 中声明的行为附加到此组件。 yii\base\Component
getBehavior() 返回命名的行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
hasEventHandlers() 返回一个值,指示是否将任何处理程序附加到命名的事件。 yii\base\Component
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\Component
hasProperty() 返回一个值,指示是否为此组件定义了属性。 yii\base\Component
init() 初始化对象。 yii\rest\Serializer
off() 从此组件分离现有的事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
serialize() 将给定的数据序列化为可以轻松转换为其他格式的格式。 yii\rest\Serializer
trigger() 触发事件。 yii\base\Component

受保护的方法

隐藏继承的方法

方法 描述 定义于
addPaginationHeaders() 将有关分页的 HTTP 标头添加到响应中。 yii\rest\Serializer
getRequestedFields() yii\rest\Serializer
serializeDataProvider() 序列化数据提供者。 yii\rest\Serializer
serializeModel() 序列化模型对象。 yii\rest\Serializer
serializeModelErrors() 序列化模型中的验证错误。 yii\rest\Serializer
serializeModels() 序列化一组模型。 yii\rest\Serializer
serializePagination() 将分页序列化为数组。 yii\rest\Serializer

属性详细信息

隐藏继承的属性

$collectionEnvelope 公共属性

用于返回集合中资源对象的信封的名称(例如 items)。当提供资源集合时使用此参数。当此参数设置且启用了分页时,序列化器将以以下格式返回集合

[
    'items' => [...],  // assuming collectionEnvelope is "items"
    '_links' => {  // pagination links as returned by Pagination::getLinks()
        'self' => '...',
        'next' => '...',
        'last' => '...',
    },
    '_meta' => {  // meta information as returned by Pagination::toArray()
        'totalCount' => 100,
        'pageCount' => 5,
        'currentPage' => 1,
        'perPage' => 20,
    },
]

如果此属性未设置,则资源数组将直接返回,而不使用信封。_links_meta 中显示的分页信息可以从响应 HTTP 标头访问。

$currentPageHeader 公共属性

包含有关当前页码(从 1 开始)信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。

public string $currentPageHeader 'X-Pagination-Current-Page'
$expandParam 公共属性

包含有关除了 $fieldsParam 中列出的字段外,还应为资源对象返回哪些字段的信息的查询参数的名称。

public string $expandParam 'expand'
$fieldsParam 公共属性

包含有关为 yii\base\Model 对象返回哪些字段的信息的查询参数的名称。如果未提供该参数或该参数为空,则将返回由 yii\base\Model::fields() 定义的默认字段集。

public string $fieldsParam 'fields'
$linksEnvelope 公共属性 (从版本 2.0.4 开始可用)

用于返回链接对象的信封(例如 _links)的名称。它仅在设置 collectionEnvelope 时生效。

public string $linksEnvelope '_links'
$metaEnvelope 公共属性 (从版本 2.0.4 开始可用)

用于返回分页对象的信封(例如 _meta)的名称。它仅在设置 collectionEnvelope 时生效。

public string $metaEnvelope '_meta'
$pageCountHeader 公共属性

包含有关数据总页数的信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。

public string $pageCountHeader 'X-Pagination-Page-Count'
$perPageHeader 公共属性

包含有关每页数据项数量的信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。

public string $perPageHeader 'X-Pagination-Per-Page'
$preserveKeys 公共属性 (从版本 2.0.10 开始可用)

是否在序列化集合数据时保留数组键。设置为 true 以允许将集合序列化为 JSON 对象,其中数组键用于索引模型对象。默认情况下,所有集合都将序列化为数组,无论数组如何索引。

另请参见 serializeDataProvider()

public boolean $preserveKeys false
$request 公共属性

当前请求。如果未设置,将使用 request 应用程序组件。

$response 公共属性

要发送的响应。如果未设置,将使用 response 应用程序组件。

$totalCountHeader 公共属性

包含有关数据项总数的信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。

public string $totalCountHeader 'X-Pagination-Total-Count'

方法详情

隐藏继承的方法

__call() 公共方法

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

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

此方法将检查任何附加的行为是否具有命名方法,并在可用时执行它。

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

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

方法名

$params array

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

当调用未知方法时

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共方法

定义于: yii\base\Component::__clone()

此方法在对象通过克隆现有对象创建后调用。

它删除所有行为,因为它们已附加到旧对象。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__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() public method

Defined in: yii\base\Component::__get()

返回组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 getter 定义的属性:返回 getter 结果
  • 行为的属性:返回行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $value = $component->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)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (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() public method

Defined in: yii\base\Component::__isset()

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

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性返回 false

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

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

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名的属性是否已设置

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() public method

Defined in: yii\base\Component::__set()

设置组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:设置属性值
  • "on xyz" 格式的事件:将处理程序附加到事件 "xyz"
  • "as xyz" 格式的行为:附加名为 "xyz" 的行为
  • 行为的属性:设置行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $component->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)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() public method

Defined in: yii\base\Component::__unset()

将组件属性设置为 null。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($component->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);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
addPaginationHeaders() protected method

将有关分页的 HTTP 标头添加到响应中。

protected void addPaginationHeaders ( $pagination )
$pagination yii\data\Pagination

                protected function addPaginationHeaders($pagination)
{
    $links = [];
    foreach ($pagination->getLinks(true) as $rel => $url) {
        $links[] = "<$url>; rel=$rel";
    }
    $this->response->getHeaders()
        ->set($this->totalCountHeader, $pagination->totalCount)
        ->set($this->pageCountHeader, $pagination->getPageCount())
        ->set($this->currentPageHeader, $pagination->getPage() + 1)
        ->set($this->perPageHeader, $pagination->pageSize)
        ->set('Link', implode(', ', $links));
}

            
attachBehavior() public method

Defined in: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。

另请参阅 detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行为的名称。

$behavior string|array|yii\base\Behavior

行为配置。这可以是以下之一

返回值 yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() public method

Defined in: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象,一个指定行为类的字符串,或者一个用于创建行为的配置数组。

另请参阅 attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() public method

Defined in: yii\base\Component::behaviors()

返回此组件应作为其行为表现的行为列表。

子类可以覆盖此方法以指定它们想要表现为的行为。

此方法的返回值应该是一个由行为名称索引的行为对象或配置数组。行为配置可以是一个指定行为类的字符串,或者一个具有以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

注意,行为类必须从 yii\base\Behavior 扩展。可以使用名称或匿名方式附加行为。当使用名称作为数组键时,使用此名称,行为可以稍后使用 getBehavior() 检索,或使用 detachBehavior() 分离。匿名行为不能检索或分离。

在此方法中声明的行为将自动(按需)附加到组件。

public array behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() public method

Defined in: yii\base\Component::canGetProperty()

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

属性可以读取,如果

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

另请参阅 canSetProperty().

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

该属性是否可读

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公共方法

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

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

属性可写,如果:

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

另请参阅 canGetProperty().

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

该属性是否可写

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
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();
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行为的名称。

返回值 yii\base\Behavior|null

分离的行为。如果行为不存在,则为 null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保 behaviors() 中声明的行为附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
getBehavior() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名的行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行为名称

返回值 yii\base\Behavior|null

行为对象,如果行为不存在,则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getRequestedFields() 受保护方法
protected array getRequestedFields ( )
返回值 array

请求的字段的名称。第一个元素是一个数组,表示请求的默认字段列表,而第二个元素是请求的除默认字段之外的额外字段的数组。

                protected function getRequestedFields()
{
    $fields = $this->request->get($this->fieldsParam);
    $expand = $this->request->get($this->expandParam);
    return [
        is_string($fields) ? preg_split('/\s*,\s*/', $fields, -1, PREG_SPLIT_NO_EMPTY) : [],
        is_string($expand) ? preg_split('/\s*,\s*/', $expand, -1, PREG_SPLIT_NO_EMPTY) : [],
    ];
}

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否将任何处理程序附加到命名的事件。

public boolean hasEventHandlers ( $name )
$name string

事件名称

返回值 boolean

事件是否已附加任何处理程序。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公共方法

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

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

方法已定义,如果:

  • 该类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为真时)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

属性名称

$checkBehaviors boolean

是否将行为的方法视为此组件的方法

返回值 boolean

方法是否已定义

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公共方法

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

返回一个值,指示是否为此组件定义了属性。

属性已定义,如果:

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

另请参阅

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

该属性是否已定义

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

            
init() 公共方法

初始化对象。

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

public void init ( )

                public function init()
{
    if ($this->request === null) {
        $this->request = Yii::$app->getRequest();
    }
    if ($this->response === null) {
        $this->response = Yii::$app->getResponse();
    }
}

            
off() 公共方法

定义于: yii\base\Component::off()

从此组件分离现有的事件处理程序。

此方法与 on() 相反。

注意:如果为事件名称传递了通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的普通名称注册的处理程序将保留。

另请参见 on()

public boolean off ( $name, $handler null )
$name string

事件名称

$handler callable|null

要移除的事件处理程序。如果为 null,则将移除附加到指定事件的所有处理程序。

返回值 boolean

如果找到并分离了处理程序

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public method

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是一个有效的 PHP 回调函数。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须使用以下签名定义,

function ($event)

其中 $event 是一个 yii\base\Event 对象,其中包含与事件关联的参数。

从 2.0.14 版本开始,您可以将事件名称指定为通配符模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另请参见 off()

public void on ( $name, $handler, $data null, $append true )
$name string

事件名称

$handler callable

事件处理程序

$data mixed

触发事件时传递给事件处理程序的数据。当调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append boolean

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 false,则将新的处理程序插入到现有处理程序列表的开头。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
serialize() public method

将给定的数据序列化为可以轻松转换为其他格式的格式。

此方法主要将已识别类型的对象转换为数组表示形式。它不会对未知对象类型或非对象数据进行转换。默认实现将处理 yii\base\Modelyii\data\DataProviderInterface\JsonSerializable。您可以覆盖此方法以支持更多对象类型。

public mixed serialize ( $data )
$data mixed

要序列化的数据。

返回值 mixed

转换后的数据。

                public function serialize($data)
{
    if ($data instanceof Model && $data->hasErrors()) {
        return $this->serializeModelErrors($data);
    } elseif ($data instanceof Arrayable) {
        return $this->serializeModel($data);
    } elseif ($data instanceof \JsonSerializable) {
        return $data->jsonSerialize();
    } elseif ($data instanceof DataProviderInterface) {
        return $this->serializeDataProvider($data);
    } elseif (is_array($data)) {
        $serializedArray = [];
        foreach ($data as $key => $value) {
            $serializedArray[$key] = $this->serialize($value);
        }
        return $serializedArray;
    }
    return $data;
}

            
serializeDataProvider() protected method

序列化数据提供者。

protected array serializeDataProvider ( $dataProvider )
$dataProvider yii\data\DataProviderInterface
返回值 array

数据提供者的数组表示形式。

                protected function serializeDataProvider($dataProvider)
{
    if (($pagination = $dataProvider->getPagination()) !== false) {
        $this->addPaginationHeaders($pagination);
    }
    if ($this->request->getIsHead()) {
        return null;
    }
    if ($this->preserveKeys) {
        $models = $dataProvider->getModels();
    } else {
        $models = array_values($dataProvider->getModels());
    }
    $models = $this->serializeModels($models);
    if ($this->collectionEnvelope === null) {
        return $models;
    }
    $result = [
        $this->collectionEnvelope => $models,
    ];
    if ($pagination !== false) {
        return array_merge($result, $this->serializePagination($pagination));
    }
    return $result;
}

            
serializeModel() protected method

序列化模型对象。

protected array serializeModel ( $model )
$model yii\base\Arrayable
返回值 array

模型的数组表示形式

                protected function serializeModel($model)
{
    if ($this->request->getIsHead()) {
        return null;
    }
    list($fields, $expand) = $this->getRequestedFields();
    return $model->toArray($fields, $expand);
}

            
serializeModelErrors() protected method

序列化模型中的验证错误。

protected array serializeModelErrors ( $model )
$model yii\base\Model
返回值 array

错误的数组表示形式

                protected function serializeModelErrors($model)
{
    $this->response->setStatusCode(422, 'Data Validation Failed.');
    $result = [];
    foreach ($model->getFirstErrors() as $name => $message) {
        $result[] = [
            'field' => $name,
            'message' => $message,
        ];
    }
    return $result;
}

            
serializeModels() protected method

序列化一组模型。

protected array serializeModels ( array $models )
$models array
返回值 array

模型的数组表示形式

                protected function serializeModels(array $models)
{
    foreach ($models as $i => $model) {
        if ($model instanceof Arrayable) {
            $models[$i] = $this->serializeModel($model);
        } elseif (is_array($model)) {
            $models[$i] = ArrayHelper::toArray($model);
        }
    }
    return $models;
}

            
serializePagination() protected method

将分页序列化为数组。

另请参见 addPaginationHeaders()

protected array serializePagination ( $pagination )
$pagination yii\data\Pagination
返回值 array

分页的数组表示形式

                protected function serializePagination($pagination)
{
    return [
        $this->linksEnvelope => Link::serialize($pagination->getLinks(true)),
        $this->metaEnvelope => [
            'totalCount' => $pagination->totalCount,
            'pageCount' => $pagination->getPageCount(),
            'currentPage' => $pagination->getPage() + 1,
            'perPage' => $pagination->getPageSize(),
        ],
    ];
}

            
trigger() public method

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用事件的所有附加处理程序,包括类级处理程序。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名称

$event yii\base\Event|null

事件实例。如果未设置,将创建一个默认的 yii\base\Event 对象。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}