Class yii\base\DynamicModel

继承yii\base\DynamicModel » yii\base\Model » yii\base\Component » yii\base\BaseObject
实现ArrayAccess, IteratorAggregate, yii\base\Arrayable, yii\base\Configurable, yii\base\StaticInstanceInterface
Uses Traitsyii\base\ArrayableTrait, yii\base\StaticInstanceTrait
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/base/DynamicModel.php

DynamicModel 是主要用于支持临时数据验证的模型类.

DynamicModel 的典型用法如下:

public function actionSearch($name, $email)
{
    $model = DynamicModel::validateData(compact('name', 'email'), [
        [['name', 'email'], 'string', 'max' => 128],
        ['email', 'email'],
    ]);
    if ($model->hasErrors()) {
        // 验证失败
    } else {
        // 验证成功
    }
}

上面的例子展示了如何在 DynamicModel 的帮助下验证$name$email. validateData() 方法创建一个 DynamicModel 的实例, 使用给定的数据(本例中为nameemail)定义属性, 然后调用 yii\base\Model::validate().

你可以像使用普通模型一样通过 hasErrors() 检查验证结果. 你也可以访问通过模型实例定义的动态属性, eg: $model->name$model->email.

或者, 你可以使用以下更"经典(classic)"的语法来执行临时数据验证:

$model = new DynamicModel(compact('name', 'email'));
$model->addRule(['name', 'email'], 'string', ['max' => 128])
    ->addRule('email', 'email')
    ->validate();

DynamicModel 通过支持所谓的"动态属性(dynamic attributes)"来实现上述临时数据验证功能. 它基本上允许通过其构造函数或 defineAttribute() 动态定义一个属性.

公共属性

隐藏继承的属性

属性类型描述定义在
$activeValidators yii\validators\Validator[] 适用于当前 场景 的验证器. 该属性是只读的. yii\base\Model
$attributes array 属性值(name => value). yii\base\Model
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component
$errors array 所有属性的错误数组. 结果是一个二维数组. 如果没有错误, 则返回空数组. 有关详细说明,请参阅 getErrors(). 该属性是只读的. yii\base\Model
$firstErrors array 第一个错误. 数组键是属性名称, 数组值是对应的错误消息. 如果没有错误, 将返回一个空数组. 该属性是只读的. yii\base\Model
$iterator ArrayIterator 用于遍历列表中项目的迭代器. 该属性是只读的. yii\base\Model
$scenario string 此模型所在的场景. 默认为: SCENARIO_DEFAULT. yii\base\Model
$validators ArrayObject|yii\validators\Validator[] 所有在模型中声明的验证器. 该属性是只读的. yii\base\Model

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的指定的方法. yii\base\Component
__clone() 在通过克隆现有对象创建对象之后调用此方法. yii\base\Component
__construct() 构造函数. yii\base\DynamicModel
__get() 返回组件属性的值. yii\base\DynamicModel
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\DynamicModel
__set() 设置组件属性的值. yii\base\DynamicModel
__unset() 将组件属性设置为null. yii\base\DynamicModel
activeAttributes() 返回在当前场景中需要验证的属性名称. yii\base\Model
addError() 向指定的属性添加新的错误. yii\base\Model
addErrors() 添加错误列表. yii\base\Model
addRule() 向此模型添加验证规则. yii\base\DynamicModel
afterValidate() 在验证结束后调用此方法. yii\base\Model
attachBehavior() 将行为附加到此组件. yii\base\Component
attachBehaviors() 将行为列表附加到组件. yii\base\Component
attributeHints() 返回属性提示列表. yii\base\Model
attributeLabels() {@inheritDoc} yii\base\DynamicModel
attributes() 返回属性名称的列表. yii\base\DynamicModel
beforeValidate() 在验证开始之前调用此方法. yii\base\Model
behaviors() 返回此组件应该具有的行为列表. yii\base\Component
canGetProperty() 返回一个值, 指示属性是否可读取. yii\base\DynamicModel
canSetProperty() 返回一个值, 指示属性是否可设置. yii\base\DynamicModel
className() 返回此类的完全限定名称. yii\base\BaseObject
clearErrors() 删除所有属性或单个属性的错误. yii\base\Model
createValidators() 根据 rules() 中指定的验证规则创建验证器对象. yii\base\Model
defineAttribute() 定义一个属性. yii\base\DynamicModel
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
extraFields() 返回可以进一步扩展并由 toArray() 返回的字段列表. yii\base\ArrayableTrait
fields() 返回未指定任何特定字段时, 默认应由 toArray() 返回的字段列表. yii\base\ArrayableTrait
formName() 返回此模型类应使用的表单名称. yii\base\Model
generateAttributeLabel() 基于给定的属性名称生成用户友好的属性标签. yii\base\Model
getActiveValidators() 返回适用于当前 场景 的验证器. yii\base\Model
getAttributeHint() 返回指定属性的文本提示. yii\base\Model
getAttributeLabel() 返回指定属性的文本标签. yii\base\Model
getAttributes() 返回属性值. yii\base\Model
getBehavior() 返回指定的行为对象. yii\base\Component
getBehaviors() 返回附加到此组件的所有行为. yii\base\Component
getErrorSummary() 将所有属性的错误作为一维数组返回. yii\base\Model
getErrors() 返回所有属性或单个属性的错误. yii\base\Model
getFirstError() 返回指定属性的第一个错误. yii\base\Model
getFirstErrors() 返回模型中每个属性的第一个错误. yii\base\Model
getIterator() 返回用于遍历模型中属性的迭代器. yii\base\Model
getScenario() 返回此模型使用的场景. yii\base\Model
getValidators() 返回在 rules() 中声明的所有验证器. yii\base\Model
hasAttribute() 返回一个值, 该值指示模型是否具有指定名称的属性. yii\base\DynamicModel
hasErrors() 返回一个值, 指示是否存在任何验证错误. yii\base\Model
hasEventHandlers() 返回一个值, 指示是否有任何处理程序附加到指定的事件. yii\base\Component
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\Component
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\Component
init() 初始化对象. yii\base\BaseObject
instance() 返回静态类实例, 该实例可用于获取元信息(meta). yii\base\StaticInstanceTrait
isAttributeActive() 返回一个值, 指示该属性在当前场景中是否处于活动状态. yii\base\Model
isAttributeRequired() 返回一个值, 指示该属性是否是必需的. yii\base\Model
isAttributeSafe() 返回一个值, 指示属性对于大规模分配是否安全. yii\base\Model
load() 用输入数据填充模型. yii\base\Model
loadMultiple() 使用来自最终用户的数据填充一组模型. yii\base\Model
off() 从该组件分离现有的事件处理程序. yii\base\Component
offsetExists() 返回指定偏移量处是否有元素. yii\base\Model
offsetGet() 返回指定偏移量处的元素. yii\base\Model
offsetSet() 将元素设置为指定的偏移量. yii\base\Model
offsetUnset() 将指定偏移处的元素值设置为null. yii\base\Model
on() 将事件处理程序附加到事件. yii\base\Component
onUnsafeAttribute() 当大规模(批量)分配不安全属性时, 将调用此方法. yii\base\Model
rules() 返回属性的验证规则. yii\base\Model
safeAttributes() 返回在当前场景中可安全分配的属性名称. yii\base\Model
scenarios() 返回场景列表和相应的活动属性. yii\base\Model
setAttributeLabel() Sets a label for an attribute. yii\base\DynamicModel
setAttributeLabels() Sets the attribute labels in a massive way. yii\base\DynamicModel
setAttributes() 以大规模(批量)的方式设置属性值. yii\base\Model
setScenario() 设置模型的场景. yii\base\Model
toArray() 将模型转换为数组. yii\base\ArrayableTrait
trigger() 触发事件. yii\base\Component
undefineAttribute() 属性中未定义. yii\base\DynamicModel
validate() 执行数据验证. yii\base\Model
validateData() 使用指定的验证规则验证给定的数据. yii\base\DynamicModel
validateMultiple() 验证多个模型. yii\base\Model

受保护的方法

隐藏继承的方法

方法描述定义在
extractFieldsFor() 从给定根字段的字段集合中提取嵌套字段. yii\base\ArrayableTrait
extractRootFields() 从嵌套字段中提取根字段名称. yii\base\ArrayableTrait
resolveFields() 确定 toArray() 可以返回哪些字段. yii\base\ArrayableTrait

事件

隐藏继承的事件

事件类型描述定义在
EVENT_AFTER_VALIDATE yii\base\Event validate() 结尾处触发的事件. yii\base\Model
EVENT_BEFORE_VALIDATE yii\base\ModelEvent validate() 开始时触发的事件. yii\base\Model

常量

隐藏继承的常量

常量描述定义在
SCENARIO_DEFAULT 'default' 默认场景的名称. yii\base\Model

方法详情

__construct() public 方法

构造函数.

public void __construct ( array $attributes = [], $config = [] )
$attributes array

定义的动态属性(name-value 对, 或名称列表).

$config array

要应用于此对象的配置数组.

__get() public 方法

返回组件属性的值.

该方法将按照以下顺序检查并采取相应措施:

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

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

public mixed __get ( $name )
$name string

属性名称.

return mixed

属性值或行为属性的值.

throws yii\base\UnknownPropertyException

如果该属性未定义.

throws yii\base\InvalidCallException

如果该属性是只写的.

__isset() public 方法

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

该方法将按照以下顺序检查并采取相应措施:

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

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

public boolean __isset ( $name )
$name string

属性名称或事件名称.

return boolean

Whether 指定的属性是否已设置.

__set() public 方法

设置组件属性的值.

该方法将按照以下顺序检查并采取相应措施:

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

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

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

属性名称或事件名称.

$value mixed

属性的值.

throws yii\base\UnknownPropertyException

如果该属性未定义.

throws yii\base\InvalidCallException

如果该属性是只读的.

__unset() public 方法

将组件属性设置为null.

该方法将按照以下顺序检查并采取相应措施:

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

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

public void __unset ( $name )
$name string

属性名称.

throws yii\base\InvalidCallException

如果该属性是只读的.

addRule() public 方法

向此模型添加验证规则.

你也可以直接操作 $validators 来添加或删除验证规则. 此方法提供了一个快捷方式.

public $this addRule ( $attributes, $validator, $options = [] )
$attributes string|array

规则要验证的属性.

$validator string|yii\validators\Validator|Closure

该规则的验证器. 它可以是:

  • builtInValidators 中列出的内置验证器名称;
  • 一个模型类的方法名称;
  • 一个匿名函数;
  • 一个验证器类名称.
  • a Validator.
$options array

要应用于验证器的选项(name-value 对).

return $this

模型自身.

attributeLabels() public 方法

{@inheritDoc}

public void attributeLabels ( )
attributes() public 方法

返回属性名称的列表.

默认情况下, 此方法返回该类的所有公共非静态属性. 你可以重写此方法来更改默认行为.

public array attributes ( )
return array

属性名称列表.

canGetProperty() public 方法

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

在以下情况下, 属性是可读的:

  • 该类具有与指定名称相关联的getter方法(在这种情况下, 属性名称不区分大小写);
  • 该类有一个具有指定名称的成员变量(当$checkVarstrue时);
  • 附加行为具有指定名称的可读属性(当$checkBehaviorstrue时).
public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称.

$checkVars boolean

是否将成员变量视为属性.

$checkBehaviors boolean

是否将行为的属性视为该组件的属性.

return boolean

属性是否可读取.

canSetProperty() public 方法

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

在以下情况下, 属性是可设置的:

  • 该类具有与指定名称相关联的setter方法(在这种情况下, 属性名称不区分大小写);
  • 该类有一个具有指定名称的成员变量(当$checkVarstrue时);
  • 附加行为具有指定名称的可写属性(当$checkBehaviorstrue时).
public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称.

$checkVars boolean

是否将成员变量视为属性.

$checkBehaviors boolean

是否将行为的属性视为该组件的属性.

return boolean

方法是否可设置.

defineAttribute() public 方法

定义一个属性.

public void defineAttribute ( $name, $value null )
$name string

属性名称.

$value mixed

属性值.

hasAttribute() public 方法 (可用自版本: 2.0.16)

返回一个值, 该值指示模型是否具有指定名称的属性.

public boolean hasAttribute ( $name )
$name string

属性名称.

return boolean

模型是否具有指定名称的属性.

setAttributeLabel() public 方法 (可用自版本: 2.0.35)

Sets a label for an attribute.

参见:

public $this setAttributeLabel ( $attribute, $label )
$attribute string

Attribute name

$label string

Attribute label value

setAttributeLabels() public 方法 (可用自版本: 2.0.35)

Sets the attribute labels in a massive way.

参见:

public $this setAttributeLabels ( array $labels = [] )
$labels array

Array of attribute labels

undefineAttribute() public 方法

属性中未定义.

public void undefineAttribute ( $name )
$name string

属性名称.

validateData() public static 方法

使用指定的验证规则验证给定的数据.

此方法将创建一个 DynamicModel 实例, 使用要验证的数据填充它, 创建指定的验证规则, 然后使用这些规则来验证数据.

public static static validateData ( array $data, $rules = [] )
$data array

要验证的数据(name-value 对).

$rules array

验证规则. 有关此参数的格式, 请参阅 yii\base\Model::rules().

return static

包含正在验证的数据的模型实例.

throws yii\base\InvalidConfigException

如果未正确指定验证规则.