Class yii\base\Model

继承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
子类yii\base\DynamicModel, yii\data\ActiveDataFilter, yii\data\DataFilter, yii\db\ActiveRecord, yii\db\BaseActiveRecord
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/base/Model.php

Model 是数据模型的基类.

模型(Model)实现了以下常用功能:

  • 属性声明: 默认情况下, 每个公共类成员都被视为模型属性;
  • 属性标签: 每个属性可以与一个标签相关联以用于显示;
  • 一次给多个属性赋值;
  • 基于场景的验证.

在执行数据验证时, 模型(Model)还会触发以下事件:

你可以直接使用模型来存储模型数据, 或者使用自定义来扩展模型属性.

有关 Model 的更多详细信息和使用信息, 请参阅 权威指南 - 应用结构 - 模型(Models).

公共属性

隐藏继承的属性

属性类型描述定义在
$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\BaseObject
__get() 返回组件属性的值. yii\base\Component
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\Component
__set() 设置组件属性的值. yii\base\Component
__unset() 将组件属性设置为null. yii\base\Component
activeAttributes() 返回在当前场景中需要验证的属性名称. yii\base\Model
addError() 向指定的属性添加新的错误. yii\base\Model
addErrors() 添加错误列表. yii\base\Model
afterValidate() 在验证结束后调用此方法. yii\base\Model
attachBehavior() 将行为附加到此组件. yii\base\Component
attachBehaviors() 将行为列表附加到组件. yii\base\Component
attributeHints() 返回属性提示列表. yii\base\Model
attributeLabels() 返回属性标签列表. yii\base\Model
attributes() 返回属性名称的列表. yii\base\Model
beforeValidate() 在验证开始之前调用此方法. yii\base\Model
behaviors() 返回此组件应该具有的行为列表. yii\base\Component
canGetProperty() 返回一个值, 指示属性是否可读取. yii\base\Component
canSetProperty() 返回一个值, 指示属性是否可设置. yii\base\Component
className() 返回此类的完全限定名称. yii\base\BaseObject
clearErrors() 删除所有属性或单个属性的错误. yii\base\Model
createValidators() 根据 rules() 中指定的验证规则创建验证器对象. yii\base\Model
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
extraFields() 返回可以进一步扩展并由 toArray() 返回的字段列表. yii\base\ArrayableTrait
fields() 返回当未指定任何特定字段时, 默认应由 toArray() 返回的字段列表. yii\base\Model
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
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
setAttributes() 以大规模(批量)的方式设置属性值. yii\base\Model
setScenario() 设置模型的场景. yii\base\Model
toArray() 将模型转换为数组. yii\base\ArrayableTrait
trigger() 触发事件. yii\base\Component
validate() 执行数据验证. yii\base\Model
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

属性详情

$activeValidators public 属性

适用于当前 场景 的验证器. 该属性是只读的.

$attributes public 属性

属性值(name => value).

public array $attributes null
$errors public 属性

所有属性的错误数组. 结果是一个二维数组. 如果没有错误, 则返回空数组. 有关详细说明,请参阅 getErrors(). 该属性是只读的.

public array $errors null
$firstErrors public 属性

第一个错误. 数组键是属性名称, 数组值是对应的错误消息. 如果没有错误, 将返回一个空数组. 该属性是只读的.

public array $firstErrors null
$iterator public 属性

用于遍历列表中项目的迭代器. 该属性是只读的.

public ArrayIterator $iterator null
$scenario public 属性

此模型所在的场景. 默认为: SCENARIO_DEFAULT.

public string $scenario null
$validators public 属性

所有在模型中声明的验证器. 该属性是只读的.

方法详情

activeAttributes() public 方法

返回在当前场景中需要验证的属性名称.

public string[] activeAttributes ( )
return string[]

安全的属性名称.

addError() public 方法

向指定的属性添加新的错误.

public void addError ( $attribute, $error '' )
$attribute string

属性名称.

$error string

新的错误消息.

addErrors() public 方法 (可用自版本: 2.0.2)

添加错误列表.

public void addErrors ( array $items )
$items array

错误列表. 数组键必须是属性名称. 数组值应该是错误消息. 如果一个属性有多个错误, 则必须以数组的形式给出这些错误. 你可以使用 getErrors() 的结果作为此参数的值.

afterValidate() public 方法

在验证结束后调用此方法.

默认实现会触发一个afterValidate事件. 你可以重写此方法, 以在验证后执行处理. 确保父实现被调用, 以便触发该事件.

public void afterValidate ( )
attributeHints() public 方法 (可用自版本: 2.0.4)

返回属性提示列表.

属性提示主要用于显示目的. 例如, 给定一个属性isPublic, 我们可以声明一个提示Whether the post should be visible for not logged in users(该帖子是否对未登录的用户可见), 它提供了用户友好的属性提示描述, 并且可以显示给最终用户.

不同于标签提示, 如果它的显式声明被省略, 则它不会自动生成, .

Note: 为了继承在父类中定义的提示, 子类需要使用诸如array_merge()之类的函数将父提示与子提示进行合并.

public array attributeHints ( )
return array

属性的提示列表(name => hint).

attributeLabels() public 方法

返回属性标签列表.

属性标签主要用于显示目的. 例如, 给定一个属性firstName, 我们可以声明一个标签First Name, 它更加用户友好, 并且可以显示给最终用户.

默认情况下, 使用 generateAttributeLabel() 生成属性标签. 此方法允许你显式指定属性标签

Note: 为了继承在父类中定义的标签, 子类需要使用诸如array_merge()之类的函数将父标签与子标签进行合并.

参见 generateAttributeLabel().

public array attributeLabels ( )
return array

属性的标签列表(name => label).

attributes() public 方法

返回属性名称的列表.

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

public array attributes ( )
return array

属性名称列表.

beforeValidate() public 方法

在验证开始之前调用此方法.

默认实现触发了一个beforeValidate事件. 你可以重写此方法, 以在验证之前进行初步检查. 确保父实现被调用, 以便触发该事件.

public boolean beforeValidate ( )
return boolean

是否应该执行验证. 默认为true. 如果返回false, 则验证将停止, 并将该模型视为无效.

clearErrors() public 方法

删除所有属性或单个属性的错误.

public void clearErrors ( $attribute null )
$attribute string

属性名称. 使用null删除所有属性的错误.

createValidators() public 方法

根据 rules() 中指定的验证规则创建验证器对象.

getValidators() 不同, 每次调用此方法时, 都会返回一个新的验证器列表.

public ArrayObject createValidators ( )
return ArrayObject

验证器对象.

throws yii\base\InvalidConfigException

如果任何验证规则配置无效.

fields() public 方法

返回当未指定任何特定字段时, 默认应由 toArray() 返回的字段列表.

字段是 toArray() 在返回数组中的已命名元素.

此方法应该返回一个字段名称或字段定义的数组. 如果是前者, 则字段名称将被视为对象属性名称, 其值将用作字段值. 如果是后者, 则数组键应该是字段名称, 而数组值应该是相应的字段定义, 它可以是对象属性名称或返回相应字段值的 PHP 可调用. 可调用的签名应该是:

function ($model, $field) {
    // 返回字段值
}

例如, 以下代码声明了四个字段:

  • email: 字段名称与属性名称email相同;
  • firstNamelastName: 字段名称为firstNamelastName, 它们的值是从first_namelast_name属性获取的;
  • fullName: 字段名称为fullName. 它的值是通过连接first_namelast_name获得的.
return [
    'email',
    'firstName' => 'first_name',
    'lastName' => 'last_name',
    'fullName' => function ($model) {
        return $model->first_name . ' ' . $model->last_name;
    },
];

在这种方法中, 你可能还想根据某些上下文信息返回不同的字段列表. 例如, 根据 场景 或当前应用程序用户的权限, 你可能会返回不同的可见字段集或过滤掉某些字段.

此方法的默认实现返回由相同属性名称索引的 attributes().

参见 toArray().

public array fields ( )
return array

字段名称或字段定义的列表.

formName() public 方法

返回此模型类应使用的表单名称.

表单名称主要由 yii\widgets\ActiveForm 用于确定如何命名模型中属性的输入字段. 如果表单名称是A, 属性名称是b, 则相应的输入名称将是A[b]. 如果表单名称是空字符串, 则输入名称将是b".

上述命名模式的目的在于, 对于包含多个不同模型的表单, 每个模型的属性都分组在 POST 数据的子数组中, 并且更容易区分它们.

默认情况下, 此方法返回模型类名(不包括命名空间部分)作为表单名称. 当模型以不同形式使用时, 你可以覆盖它.

参见 load().

public string formName ( )
return string

该模型类的表单名称.

throws yii\base\InvalidConfigException

当表单使用匿名类定义并且未重写formName()方法时.

generateAttributeLabel() public 方法

基于给定的属性名称生成用户友好的属性标签.

这可以通过用空格替换下划线, 破折号和点, 并将每个单词的第一个字母更改为大写来实现. 例如, department_nameDepartmentName将会生成Department Name.

public string generateAttributeLabel ( $name )
$name string

列名称.

return string

属性标签.

getActiveValidators() public 方法

返回适用于当前 场景 的验证器.

public yii\validators\Validator[] getActiveValidators ( $attribute null )
$attribute string

应该返回适用验证器的属性的名称. 如果为null, 则将返回模型中所有属性的验证器.

return yii\validators\Validator[]

适用于当前 场景 的验证器.

getAttributeHint() public 方法 (可用自版本: 2.0.4)

返回指定属性的文本提示.

参见 attributeHints().

public string getAttributeHint ( $attribute )
$attribute string

属性名称.

return string

属性的提示.

getAttributeLabel() public 方法

返回指定属性的文本标签.

参见:

public string getAttributeLabel ( $attribute )
$attribute string

属性名称.

return string

属性的标签.

getAttributes() public 方法

返回属性值.

public array getAttributes ( $names null, $except = [] )
$names array

需要返回其值的属性列表. 默认为null, 表示将返回 attributes() 中列出的所有属性. 如果是数组, 则仅返回数组中的属性.

$except array

其值不应返回的属性列表.

return array

属性值(name => value).

getErrorSummary() public 方法 (可用自版本: 2.0.14)

将所有属性的错误作为一维数组返回.

参见:

public array getErrorSummary ( $showAllErrors )
$showAllErrors boolean

如果设置为true, 则会显示每个属性的每个错误消息, 否则将仅显示每个属性的第一个错误消息.

return array

一个表示所有属性的错误的一维数组. 如果没有错误, 则返回空数组.

getErrors() public 方法

返回所有属性或单个属性的错误.

参见:

public array getErrors ( $attribute null )
$attribute string

属性名称. 使用null来检索所有属性的错误.

return array

所有属性或指定属性的错误. 如果没有错误, 则返回空数组.

Note: 当返回所有属性的错误时, 结果是一个二维数组, 如下所示:

[
    'username' => [
        'Username is required.',
        'Username must contain only word characters.',
    ],
    'email' => [
        'Email address is invalid.',
    ]
]
getFirstError() public 方法

返回指定属性的第一个错误.

参见:

public string getFirstError ( $attribute )
$attribute string

属性名称.

return string

错误消息. 如果没有错误, 则返回null.

getFirstErrors() public 方法

返回模型中每个属性的第一个错误.

参见:

public array getFirstErrors ( )
return array

第一个错误. 数组键是属性名称, 数组值是相应的错误消息. 如果没有错误, 将返回一个空数组.

getIterator() public 方法

返回用于遍历模型中属性的迭代器.

接口 IteratorAggregate 需要此方法.

public ArrayIterator getIterator ( )
return ArrayIterator

遍历列表中项目的迭代器.

getScenario() public 方法

返回此模型使用的场景.

场景会影响验证的执行, 以及哪些属性可以大规模(批量)分配.

public string getScenario ( )
return string

该模型所在的场景. 默认为 SCENARIO_DEFAULT.

getValidators() public 方法

返回在 rules() 中声明的所有验证器.

该方法不同于 getActiveValidators(), 因为后者仅返回适用于当前 场景 的验证器.

因为此方法返回一个 ArrayObject 对象, 所以可以通过插入或删除验证器(在模型行为中有用)来操作它. 例如:

$model->validators[] = $newValidator;
public ArrayObject|yii\validators\Validator[] getValidators ( )
return ArrayObject|yii\validators\Validator[]

所有在模型中声明的验证器.

hasErrors() public 方法

返回一个值, 指示是否存在任何验证错误.

public boolean hasErrors ( $attribute null )
$attribute string|null

属性名称. 使用null来检查所有属性.

return boolean

是否有任何错误.

isAttributeActive() public 方法

返回一个值, 指示该属性在当前场景中是否处于活动状态.

参见 activeAttributes().

public boolean isAttributeActive ( $attribute )
$attribute string

属性名称.

return boolean

该属性在当前场景中是否处于活动状态.

isAttributeRequired() public 方法

返回一个值, 指示该属性是否是必需的.

这是通过检查属性是否与当前 场景 中的 required 验证规则相关联来确定的.

Note: 当验证程序使用 $when 进行条件验证时, 无论when条件如何, 此方法都将返回false, 因为它可能在模型加载数据之前被调用.

public boolean isAttributeRequired ( $attribute )
$attribute string

属性名称.

return boolean

该属性是否是必须的.

isAttributeSafe() public 方法

返回一个值, 指示属性对于大规模分配是否安全.

参见 safeAttributes().

public boolean isAttributeSafe ( $attribute )
$attribute string

属性名称.

return boolean

该属性是否适合大规模分配.

load() public 方法

用输入数据填充模型.

此方法提供了一个方便的快捷方法:

if (isset($_POST['FormName'])) {
    $model->attributes = $_POST['FormName'];
    if ($model->save()) {
        // handle success
    }
}

现在, 用load()可以写成:

if ($model->load($_POST) && $model->save()) {
    // handle success
}

除非指定了$formName参数, 否则load()从模型的 formName() 方法(可以覆盖它)获取'FormName'. 如果表单名称为空, 那么load()会使用整个$data填充模型, 而不是使用$data['FormName'].

Note: 被填充的数据受 setAttributes() 的安全检查.

public boolean load ( $data, $formName null )
$data array

要加载的数据数组, 通常是$_POST$_GET.

$formName string

用于将数据加载到模型中的表单名称. 如果未设置, 则使用 formName().

return boolean

load()是否在$data中找到了预期的表单.

loadMultiple() public static 方法

使用来自最终用户的数据填充一组模型.

该方法主要用于收集表格数据输入.

要为每个模型加载的数据是$data[formName][index], 其中formNameformName() 的值, index$models数组中模型的索引.

如果 formName() 为空, 则将使用$data[index]来填充每个模型.

setAttributes() 将对填充到每个模型的数据进行安全检查.

public static boolean loadMultiple ( $models, $data, $formName null )
$models array

要填充的模型.

Note: 所有模型应具有相同的类.

$data array

数据数组. 这通常是$_POST$_GET, 但也可以是最终用户提供的任何有效数组.

$formName string

用于将数据加载到模型中的表单名称. 如果未设置, 它将使用$models中第一个模型的 formName() 值. 此参数自版本 2.0.1 起可用.

return boolean

是否至少有一个模型已成功填充.

offsetExists() public 方法

返回指定偏移量处是否有元素.

SPL 接口 ArrayAccess 需要此方法. 当你使用isset($model[$offset])时, 它会被隐式的调用.

public boolean offsetExists ( $offset )
$offset mixed

要检查的偏移量.

return boolean

是否存在偏移量.

offsetGet() public 方法

返回指定偏移量处的元素.

SPL 接口 ArrayAccess 需要此方法. 当你使用$value = $model[$offset];时, 它会被隐式的调用.

public mixed offsetGet ( $offset )
$offset mixed

要检索元素的偏移量.

return mixed

偏移量处的元素, 如果在偏移处未找到任何元素, 则返回null.

offsetSet() public 方法

将元素设置为指定的偏移量.

SPL 接口 ArrayAccess 需要此方法. 当你使用$model[$offset] = $item;时, 它会被隐式的调用.

public void offsetSet ( $offset, $item )
$offset integer

设置元素的偏移量.

$item mixed

元素的值.

offsetUnset() public 方法

将指定偏移处的元素值设置为null.

SPL 接口 ArrayAccess 需要此方法. 当你使用unset($model[$offset])时, 它会被隐式的调用.

public void offsetUnset ( $offset )
$offset mixed

未设置元素的偏移量.

onUnsafeAttribute() public 方法

当大规模(批量)分配不安全属性时, 将调用此方法.

如果打开 YII_DEBUG, 则默认实现将记录一条警告消息. 否则不执行任何操作.

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

不安全的属性名称.

$value mixed

属性值.

rules() public 方法

返回属性的验证规则.

validate() 使用验证规则来检查属性值是否有效. 子类可以重写此方法来声明不同的验证规则.

每个规则都是具有以下结构的数组:

[
    ['attribute1', 'attribute2'],
    'validator type',
    'on' => ['scenario1', 'scenario2'],
    //...other parameters...
]

其中

  • 属性列表: required, 指定要验证的属性数组, 对于单个属性, 你可以传递一个字符串;
  • 验证器类型: required, 指定要使用的验证器. 它可以是内置的验证器名称, 模型类的方法名称, 匿名函数或验证器类名称.
  • on: optional, 指定可以在其中应用验证规则的 场景 数组. 如果未设置此选项, 则该规则将适用于所有场景.
  • 可以指定其它的 name-value 对来初始化相应的验证器属性. 有关可能的属性, 请参阅各个验证器类 API.

验证器可以是扩展自 yii\validators\Validator 的类的对象, 也可以是具有以下签名的模型类方法(称为 内联验证器(inline validator)):

// $params 指的是规则中给出的验证参数
function validatorName($attribute, $params)

上面的$attribute指的是当前正在验证的属性, 而$params则包含一组验证器配置选项, 例如string验证器中的max. 当做正在验证的属性的值可以通过$this->$attribute来访问,

Note: attribute之前的$符号, 这将获取变量$attribute的值, 并将其用作要访问的属性的名称.

Yii 还提供了一组 内置验证器. 每个验证器都有一个别名, 可以在指定验证规则时使用.

以下是一些例子:

[
    // 内置验证器: "required"
    [['username', 'password'], 'required'],
    // 内置验证器: "string",  用"min"和"max"属性定制
    ['username', 'string', 'min' => 3, 'max' => 12],
    // 内置验证器: "compare", 仅在"register"场景中使用
    ['password', 'compare', 'compareAttribute' => 'password2', 'on' => 'register'],
    // 通过模型类中的 "authenticate()" 方法定义的内联验证器, 仅在"login"场景中使用
    ['password', 'authenticate', 'on' => 'login'],
    // 使用类验证器: "DateRangeValidator"
    ['dateRange', 'DateRangeValidator'],
];

Note: 为了继承父类中定义的规则, 子类需要使用诸如array_merge()之类的函数将父规则与子规则进行合并.

参见 scenarios().

public array rules ( )
return array

验证规则.

safeAttributes() public 方法

返回在当前场景中可安全分配的属性名称.

public string[] safeAttributes ( )
return string[]

安全的属性名称.

scenarios() public 方法

返回场景列表和相应的活动属性.

活动属性是在当前场景中需要验证的属性. 返回的数组应采用以下格式:

[
    'scenario1' => ['attribute11', 'attribute12', ...],
    'scenario2' => ['attribute21', 'attribute22', ...],
    ...
]

默认情况下, 活动属性被认为是安全的, 并且可以被大规模(批量)分配. 如果一个属性不应该被大规模(批量)分配(因此被认为是不安全的), 请在该属性前添加一个感叹号(eg. !rank).

此方法的默认实现将返回 rules() 声明中找到的所有场景. 名为 SCENARIO_DEFAULT 的特殊场景将包含在 rules() 中找到的所有属性. 每个场景都将与适用于该场景的验证规则所验证的属性相关联.

public array scenarios ( )
return array

场景列表和相应的活动属性.

setAttributes() public 方法

以大规模(批量)的方式设置属性值.

参见:

public void setAttributes ( $values, $safeOnly true )
$values array

要分配给模型的属性值(name => value).

$safeOnly boolean

是否只应对安全属性进行分配. 安全属性是与当前 场景 中的验证规则相关联的属性.

setScenario() public 方法

设置模型的场景.

Note: 此方法不检查场景是否存在.

validate() 方法将执行此检查.

public void setScenario ( $value )
$value string

该模型所在的场景.

validate() public 方法

执行数据验证.

该方法执行适用于当前 场景 的验证规则. 以下标准用于确定规则在当前是否适用:

  • 该规则必须与当前 场景 相关的属性相关联;
  • 规则必须对当前当前 场景 有效;

该方法将在实际验证之前和之后分别调用 beforeValidate()afterValidate(). 如果 beforeValidate() 返回false, 则将取消验证, 并且不会调用 afterValidate().

验证过程中发现的错误可以通过 getErrors(), getFirstErrors()getFirstError() 来检索.

public boolean validate ( $attributeNames null, $clearErrors true )
$attributeNames string[]|string

应验证的属性名称或属性名称列表. 如果此参数为空, 则表示应验证适用的验证规则中列出的所有属性.

$clearErrors boolean

在执行验证之前是否调用 clearErrors().

return boolean

验证是否成功, 没有任何错误.

throws yii\base\InvalidArgumentException

如果当前 场景 是未知的.

validateMultiple() public static 方法

验证多个模型.

该方法将验证每个模型. 正在验证的模型可能是相同或不同的类型.

public static boolean validateMultiple ( $models, $attributeNames null )
$models array

要验证的模型列表.

$attributeNames array

应该验证的属性名称列表. 如果此参数为空, 则表示应验证适用的验证规则中列出的所有属性.

return boolean

是否对所有模型都是有效的. 如果一个或多个模型有验证错误, 则会返回false.

事件详情

EVENT_AFTER_VALIDATE 事件类型 yii\base\Event

validate() 结尾处触发的事件.

EVENT_BEFORE_VALIDATE 事件类型 yii\base\ModelEvent

validate() 开始时触发的事件. 你可以将 yii\base\ModelEvent::$isValid 设置为false以停止验证.