类 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 |
公共方法
受保护的方法
方法 | 描述 | 定义于 |
---|---|---|
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 |
属性详细信息
用于返回集合中资源对象的信封的名称(例如 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 标头访问。
包含有关当前页码(从 1 开始)信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。
包含有关除了 $fieldsParam 中列出的字段外,还应为资源对象返回哪些字段的信息的查询参数的名称。
包含有关为 yii\base\Model 对象返回哪些字段的信息的查询参数的名称。如果未提供该参数或该参数为空,则将返回由 yii\base\Model::fields() 定义的默认字段集。
用于返回链接对象的信封(例如 _links
)的名称。它仅在设置 collectionEnvelope
时生效。
用于返回分页对象的信封(例如 _meta
)的名称。它仅在设置 collectionEnvelope
时生效。
包含有关数据总页数的信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。
包含有关每页数据项数量的信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。
是否在序列化集合数据时保留数组键。设置为 true
以允许将集合序列化为 JSON 对象,其中数组键用于索引模型对象。默认情况下,所有集合都将序列化为数组,无论数组如何索引。
另请参见 serializeDataProvider()。
包含有关数据项总数的信息的 HTTP 标头的名称。在使用分页提供资源集合时使用。
方法详情
定义于: 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()");
}
public void __clone ( ) |
public function __clone()
{
$this->_events = [];
$this->_eventWildcards = [];
$this->_behaviors = null;
}
定义于: 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();
}
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);
}
Defined in: yii\base\Component::__isset()
检查属性是否已设置,即已定义且不为空。
此方法将按以下顺序检查并相应地采取行动
- 由 setter 定义的属性:返回属性是否已设置
- 行为的属性:返回属性是否已设置
- 对于不存在的属性返回
false
不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 isset($component->property)
时会隐式调用。
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;
}
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);
}
Defined in: yii\base\Component::__unset()
将组件属性设置为 null。
此方法将按以下顺序检查并相应地采取行动
- 由 setter 定义的属性:将属性值设置为 null
- 行为的属性:将属性值设置为 null
不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($component->property)
时会隐式调用。
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);
}
将有关分页的 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));
}
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);
}
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);
}
}
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 [];
}
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;
}
定义于: 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;
}
::class
代替。
定义于: yii\base\BaseObject::className()
返回此类的完全限定名称。
public static string className ( ) | ||
返回值 | string |
此类的完全限定名称。 |
---|
public static function className()
{
return get_called_class();
}
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;
}
定义于: yii\base\Component::detachBehaviors()
从组件中分离所有行为。
public void detachBehaviors ( ) |
public function detachBehaviors()
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $name => $behavior) {
$this->detachBehavior($name);
}
}
定义于: 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);
}
}
}
定义于: 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;
}
定义于: yii\base\Component::getBehaviors()
返回附加到此组件的所有行为。
public yii\base\Behavior[] getBehaviors ( ) | ||
返回值 | yii\base\Behavior[] |
附加到此组件的行为列表 |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
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) : [],
];
}
定义于: 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);
}
定义于: 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;
}
定义于: 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);
}
初始化对象。
此方法在对象使用给定配置初始化后,在构造函数结束时调用。
public void init ( ) |
public function init()
{
if ($this->request === null) {
$this->request = Yii::$app->getRequest();
}
if ($this->response === null) {
$this->response = Yii::$app->getResponse();
}
}
定义于: 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;
}
将事件处理程序附加到事件。
事件处理程序必须是一个有效的 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]);
}
}
将给定的数据序列化为可以轻松转换为其他格式的格式。
此方法主要将已识别类型的对象转换为数组表示形式。它不会对未知对象类型或非对象数据进行转换。默认实现将处理 yii\base\Model、yii\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;
}
序列化数据提供者。
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;
}
序列化模型对象。
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);
}
序列化模型中的验证错误。
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;
}
序列化一组模型。
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;
}
将分页序列化为数组。
另请参见 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(),
],
];
}
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);
}
注册 或 登录 以发表评论。