Class yii\base\Model
2017-03-08 00:00
411 查看
类yii \ \模型基础
所有类 | 方法 | 事件 | 常量继承 | yii\base\Model » yii\base\Component » yii\base\Object |
---|---|
实现 | ArrayAccess, IteratorAggregate, yii\base\Arrayable |
Uses Traits | yii\base\ArrayableTrait |
可用自版本 | 2.0 |
模型实现以下常用的功能:
属性声明:默认情况下,每一个公共类成员被认为是一个模型属性
属性标签:每个属性可能与一个标签显示的目的
大规模属性赋值
基于场景的验证
当执行数据验证模型还提出了以下事件:
初EVENT_BEFORE_VALIDATE:一个事件引发了validate()
EVENT_AFTER_VALIDATE: 一个事件提出的验证
你可以直接使用模型来存储数据,用定制或扩展它。
更多细节和使用信息模型,请参阅指南文章模型
公共方法
隐藏继承方法事件
隐藏继承事件事件 | 类型 | 描述 | 定义在 |
---|---|---|---|
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 |
方法详情
activeAttributes() public 方法返回属性名称,验证在当前场景。
public string[] activeAttributes ( ) | ||
return | string[] | 安全属性名称 |
---|
添加一个新的错误指定的属性。
public void addError ( $attribute, $error = '' ) | ||
$attribute | string | 属性名称 |
$error | string | 新的错误消息 |
错误的添加了一个列表。
public void addErrors ( array $items ) | ||
$items | array | 错误的列表。数组的键必须属性名称。数组的值应该是错误消息。如果属性有多个错误,这些错误必须被给予一个数组。你可以使用的结果getErrors()为这个参数的值。 |
验证结束后调用该方法
默认实现提出了一个
afterValidate事件。你可以重写这个方法做后处理后验证。确保调用父实现,这样可以提高。
public void afterValidate ( ) |
返回属性提示。
主要用于显示目的属性提示。例如,给定一个属性
isPublic,我们可以声明一个提示后是否应该为没有登录用户是可见的,它提供了用户友好的描述属性的意义和可以显示给终端用户。
与标签提示不会生成,如果省略其显式声明。
请注意,为了继承父类中定义的提示,子类需要父母与孩子提示提示合并使用等功能
array_merge().
public array attributeHints ( ) | ||
return | array | Attribute hints (name => hint) |
---|
返回属性标签。
属性标签主要用于显示目的。例如,给定一个属性firstName,我们可以声明一个标签第一Namewhich更具用户友好性,并可以显示给终端用户.
默认情况下使用generateAttributeLabel生成一个generateAttributeLabel()。这种方法允许您显式地指定属性标签。
请注意,为了继承父类中定义的标签,一个子类需要合并父与子标签标签使用等功能
array_merge().
参见 generateAttributeLabel().
public array attributeLabels ( ) | ||
return | array | Attribute labels (name => label) |
---|
返回属性名称的列表。
默认情况下,这个方法返回所有公共类的非静态属性。你可以重写这个方法来改变默认的行为
public array attributes ( ) | ||
return | array | List of attribute names. |
---|
验证开始前调用该方法.
默认实现提出了一个beforeValidate事件。你可以重写这个方法做初步检查前验证。确保调用父实现,这样可以提高。
public boolean beforeValidate ( ) | ||
return | boolean | 验证是否应该被执行。默认值为true。如果返回错误,验证将停止和模型被认为是无效的。 |
---|
为所有属性或一个单一属性删除错误.
public void clearErrors ( $attribute = null ) | ||
$attribute | string | 属性名称。用零来消除所有属性的错误. |
创建验证器对象基于验证规则中指定的 rules().
不像getValidators(),每次调用这个方法时,一个新的验证器将返回的列表。
public ArrayObject createValidators ( ) | ||
return | ArrayObject | 验证器 |
---|---|---|
throws | yii\base\InvalidConfigException | 如果任何验证规则配置是无效的 |
返回的字段列表应该返回默认的\ yii \基地\ toArray()当没有指定特定的字段。
一个字段是一个名叫在返回的数组元素 \yii\base\toArray().
此方法应该返回一个数组字段名和字段定义。如果是前者,字段名称将被视为一个对象属性名称的值将被用作字段值。如果是后者,数组的键应该是字段名,而数组的值应该是对应的字段定义可以是一个对象的属性名或一个PHP调用返回相应的字段值。可赎回的签名应该是:
function ($model, $field) { // return field value }
例如,下面的代码声明四个字段:
firstName和lastName:firstName和lastName字段名称,和它们的值从first_nameand last_name获得属性;
fullName:fullName字段名。它的值是通过连接first_name和last_name。
return [ 'email', 'firstName' => 'first_name', 'lastName' => 'last_name', 'fullName' => function ($model) { return $model->first_name . ' ' . $model->last_name; }, ];
在这个方法中,您可能还想返回不同的字段列表基于一些上下文信息。例如,根据\yii\base\scenario或当前应用程序用户的特权,你可能会返回不同的字段或过滤掉一些字段可见。
该方法返回属性的默认实现attributes() ()相同索引的属性名称。
参见 \yii\base\toArray().
public array fields ( ) | ||
return | array | 字段名和字段定义的列表。 |
---|
返回表单名称,应该使用这个模型类。
所使用的表单名称主要是 yii\widgets\ActiveForm来决定如何输入字段名称属性的一个模型。如果表单的名字是“A”和一个属性的名字是“b”,然后输入相应的名称是“”。如果表单名称是一个空字符串,然后输入名称是“b”
上述命名模式的目的是,包含多个不同形式模型,每个模型的属性分组赋的post数据,很容易区分他们。
默认情况下,这个方法返回模型类名称(没有名称空间的一部分)作为表单名称。你可以覆盖它当模型中使用不同的形式。
参见 load().
public string [b]formName ( ) | ||
return | string | 这个模型类的名称。 |
---|
生成一个用户友好的属性标签的基础上为属性名称。
这是通过替换下划线,破折号和点空白,改变每个单词的第一个字母大写。例如,“department_name”或“DepartmentName”将生成“Department Name”
public string generateAttributeLabel ( $name ) | ||
$name | string | 列名 |
return | string | 属性标签 |
---|
返回验证器适用于当前 \yii\base\scenario.
public yii\validators\Validator[] getActiveValidators ( $attribute = null ) | ||
$attribute | string | 属性的名称,其适用的验证器应该返回。如果这是零,模型中所有属性的验证器将被归还。 |
return | yii\validators\Validator[] | 验证器适用于当前 \yii\base\scenario. |
---|
返回指定的属性的文本提示
参见 attributeHints().
public string getAttributeHint ( $attribute ) | ||
$attribute | string | The attribute name |
return | string | The attribute hint |
---|
返回指定的属性的文本标签。
参见:
generateAttributeLabel()
attributeLabels()
public string getAttributeLabel ( $attribute ) | ||
$attribute | string | 属性名称 |
return | string | 属性标签 |
---|
Returns attribute values.
public array getAttributes ( $names = null, $except = [] ) | ||
$names | array | 需要返回的属性值列表。默认为零,这意味着所有属性中列出的attributes()将返回。如果它是一个数组,数组中只有属性将被归还 |
$except | array | 不应该返回属性的值的列表。 |
return | array | 属性值(名称= >值)。 |
---|
返回所有属性的错误或一个属性。
参见:
getFirstErrors()
getFirstError()
public array getErrors ( $attribute = null ) | ||
$attribute | string | 属性名称。使用null来检索所有属性的错误。 |
return | array | 错误的所有属性或指定的属性。如果没有错误则返回空数组。请注意,为所有属性返回错误时,结果是一个二维数组,如下:[ 'username' => [ 'Username is required.', 'Username must contain only word characters.', ], 'email' => [ 'Email address is invalid.', ] ] |
---|
返回指定的属性的第一个错误
参见:
getErrors()
getFirstErrors()
public string getFirstError ( $attribute ) | ||
$attribute | string | 属性名称. |
return | string | 错误消息。如果没有错误返回Null. |
---|
返回第一个错误的每个属性模型.
参见:
getErrors()
getFirstError()
public array getFirstErrors ( ) | ||
return | array | 第一个错误。数组的键属性名称,数组值相应的错误消息。将返回一个空数组,如果没有错误. |
---|
返回一个迭代器遍历属性的模型.
这个方法是IteratorAggregate所需的接口
public ArrayIterator getIterator ( ) | ||
return | ArrayIterator | 迭代器遍历列表中的项目 |
---|
返回此模型中使用的场景。
场景影响验证是如何执行的,以及哪些属性可以大规模分配。
public string getScenario ( ) | ||
return | string | 这个模型的场景。默认为 SCENARIO_DEFAULT. |
---|
返回所有rules()中声明的验证规则。
这种方法不同于getActiveValidators(),后者只返回验证器适用于当前
因为这个方法返回一个ArrayObject对象,通过插入或删除,你可以操纵验证器(用于模型的行为)。例如,
$model->validators[] = $newValidator;
public ArrayObject|yii\validators\Validator[] getValidators ( ) | ||
return | ArrayObject|yii\validators\Validator[] | 中声明的所有验证器模型。 |
---|
返回一个值指示是否有任何验证错误。
public boolean hasErrors ( $attribute = null ) | ||
$attribute | string|null | 属性名称。使用null检查所有属性。 |
return | boolean | 是否有任何错误。 |
---|
返回一个值指示是否活跃在当前场景的属性.
参见 activeAttributes().
public boolean isAttributeActive ( $attribute ) | ||
$attribute | string | 属性名称 |
return | boolean | 在当前的场景属性是否活跃 |
---|
返回一个值指示是否需要的属性。
这是由检查如果所需的属性与一个验证规则在当前 \yii\base\scenario.
注意,当验证器条件验证应用使用yii\validators\RequiredValidator::$when这个方法将return false不管条件之前,因为它可能被称为模型加载数据。
public boolean isAttributeRequired ( $attribute ) | ||
$attribute | string | 属性名称 |
return | boolean | 是否需要的属性 |
---|
返回一个值指示是否属性是安全的大规模作业.
参见 safeAttributes().
public boolean isAttributeSafe ( $attribute ) | ||
$attribute | string | 属性名称 |
return | boolean | 属性是否安全的大规模作业 |
---|
与输入数据填充模型.
这种方法提供了一个方便的快捷方式:
if (isset($_POST['FormName'])) { $model->attributes = $_POST['FormName']; if ($model->save()) { // handle success } }
load()()可以写成:
if ($model->load($_POST) && $model->save()) { // handle success }
load()从模型的FormName获得‘FormName’()方法(你可能覆盖),除非美元FormName参数。如果表单名称为空、load()填充模型与美元的整个数据,而不是$ data[' FormName ']。
注意,数据被setAttributes填充受安全 setAttributes().
public boolean load ( $data, $formName = null ) | ||
$data | array | 数组的数据load,通常$ _POST或$ _GET |
$formName | string | 表单名称使用加载数据到模型中。如果没有设置,formName使用的是()。 |
return | boolean | 是否加载 load()发现预期的形式在元 $data |
---|
填充的一组模型与最终用户的数据.
主要用于收集表格数据输入。每个模型的数据加载是
$data[formName][index],,在formName指formName的价值(),和索引的索引数组模型的模型。如果formName()为空,
$data[index]将用于填充每个模型。每个模型的数据填充是setAttributes()的安全检查
public static boolean loadMultiple ( $models, $data, $formName = null ) | ||
$models | array | 填充模型。请注意,所有的模型都应该有相同的类. |
$data | array | 数组的数据。这通常是 $_POST或 $_GET,,但也可以是任何有效的数组提供的最终用户。 |
$formName | string | 表单名称用于将数据加载到模型。如果没有设置,那么将使用formName() $models中的第一个模型的价值。这个参数自2.0.1版本是可用的 |
return | boolean | 至少一个模型是否成功地填充。 |
---|
返回是否有指定偏移位置的一个元素.
该方法所需的SPL ArrayAccess接口。时隐式地调用您使用类似
isset($model[$offset]).
public boolean offsetExists ( $offset ) | ||
$offset | mixed | 检查的抵消. |
return | boolean | 是否存在一个偏移量. |
---|
返回指定偏移位置的元素。
该方法所需的SPL ArrayAccess接口。时隐式地调用您使用
$value = $model[$offset];.
public mixed offsetGet ( $offset ) | ||
$offset | mixed | 抵消检索元素. |
return | mixed | 元素在抵消,零如果没有找到元素的偏移量 |
---|
设置指定偏移位置的元素。
该方法所需的SPL ArrayAccess接口。时隐式地调用您使用
$model[$offset] = $item;.
public void offsetSet ( $offset, $item ) | ||
$offset | integer | 偏移量元素 |
$item | mixed | 元素的值 |
设置指定偏移位置的元素值为null。
该方法所需的SPL ArrayAccess接口。时隐式地调用您使用类似的
unset($model[$offset]).
public void offsetUnset ( $offset ) | ||
$offset | mixed | 设置元素的偏移量 |
调用该方法时,一个不安全的属性被分配。
的默认实现将日志如果YII_DEBUG是一条警告消息。它没有否则。
public void onUnsafeAttribute ( $name, $value ) | ||
$name | string | 不安全的属性名称 |
$value | mixed | 属性值 |
返回属性的验证规则。
验证规则使用validate(),以检查是否属性值是有效的。子类可以重写此方法声明不同的验证规则.
每个规则是一个数组使用以下结构:
[ ['attribute1', 'attribute2'], 'validator type', 'on' => ['scenario1', 'scenario2'], //...other parameters... ]
where
属性列表:要求,指定的属性数组来进行验证,对于单属性可以通过一个字符串;
验证器类型:要求,指定验证器使用。它可以是一个内置验证器名称、方法模型类的名称,一个匿名函数,或者确认器类的名字.
可选的,数组指定 \yii\base\scenario验证规则可以应用。如果没有设置这个选项,规则将适用于所有情况
可以指定额外的名称-值对初始化相应的验证器属性。请参考个人为可能的属性确认器类的API.
一个验证器可以是一个类的对象扩展yii\validators\Validator验证器,或一个模型类方法(称为内联验证器),以下签名
// $params refers to validation parameters given in the rule function validatorName($attribute, $params)
在上面的属性指的是属性目前验证美元,美元参数包含一个验证器数组配置选项,如马克斯的字符串验证器。目前验证属性的值可以作为美元$ this - >访问属性。注意之前美元属性;这是将变量$属性的值和使用它作为访问的属性的名称
Yii还提供了一组内置验证器。每一个都有一个别名指定验证规则时可以使用。
以下是一些例子:
[ // built-in "required" validator [['username', 'password'], 'required'], // built-in "string" validator customized with "min" and "max" properties ['username', 'string', 'min' => 3, 'max' => 12], // built-in "compare" validator that is used in "register" scenario only ['password', 'compare', 'compareAttribute' => 'password2', 'on' => 'register'], // an inline validator defined via the "authenticate()" method in the model class ['password', 'authenticate', 'on' => 'login'], // a validator of class "DateRangeValidator" ['dateRange', 'DateRangeValidator'], ];
请注意,为了继承父类中定义的规则,一个子类需要父母与孩子规则合并使用
array_merge().
参见 scenarios().
public array rules ( ) | ||
return | array | 验证规则 |
---|
返回属性名称,是安全的大规模分配在当前场景。
public string[] safeAttributes ( ) | ||
return | string[] | 安全属性名称 |
---|
返回一个列表的场景和相应的活动属性
一个活跃的属性是当前场景中验证。返回的数组应该在以下格式:
[ 'scenario1' => ['attribute11', 'attribute12', ...], 'scenario2' => ['attribute21', 'attribute22', ...], ... ]
默认情况下,一个活跃的属性被认为是安全的,可以大规模分配。如果属性不应该大规模分配(因此被认为是不安全的),请与一个感叹字符前缀的属性(例如!排名)
该方法的默认实现将返回所有场景中发现的rules().声明。一个特殊场景叫SCENARIO_DEFAULT将包含所有属性中发现的rules().。每个场景将与属性相关的验证的验证规则,适用于场景。
public array scenarios ( ) | ||
return | array | 一个场景和相应的积极的属性列表。 |
---|
设置属性值在一个巨大的方式。
参见:
safeAttributes()
attributes()
public void setAttributes ( $values, $safeOnly = true ) | ||
$values | array | 属性值(名称= >值)被分配到模型中。 |
$safeOnly | boolean | 作业是否应该只做安全属性。安全属性是与一个验证规则在当前\yii\base\scenario. |
集的场景模型
注意,这个方法不检查是否存在的场景。validate()方法会执行此检查。
public void setScenario ( $value ) | ||
$value | string | 这个模型的场景. |
执行数据验证.
这个方法执行验证规则适用于当前\yii\base\scenario.。以下标准用来确定目前适用的规则:
规则必须与属性相关的关联到当前场景;
当前场景的规则必须是有效的.
这个方法将调用beforeValidate()和afterValidate()之前和之后的实际验证,分别。如果beforeValidate()返回false,验证将会被取消及afterValidate()将不会被调用
错误可以通过检索验证中发现getErrors(),getFirstErrors()和getFirstError()。
public boolean validate ( $attributeNames = null, $clearErrors = true ) | ||
$attributeNames | array | 应验证的属性名称列表。如果该参数为空,这意味着任何属性中列出适用的验证规则应该验证。 |
$clearErrors | boolean | 是否调用clearErrors()之前执行验证 |
return | boolean | 验证是否成功没有任何错误。 |
---|---|---|
throws | yii\base\InvalidParamException | 如果当前场景是未知的. |
验证多个模型.
该方法将验证每一个模型。正在验证的模型可能是相同的或不同的类型。
public static boolean validateMultiple ( $models, $attributeNames = null ) | ||
$models | array | The models to be validated |
$attributeNames | array | 应验证的属性名称列表。如果该参数为空,这意味着任何属性中列出适用的验证规则应该验证。 |
return | boolean | 是否所有的模型是有效的。错误将返回如果一个或多个模型验证错误。 |
---|
事件详情
EVENT_AFTER_VALIDATE yii\base\Event类型的事件事件引发的 validate()
EVENT_BEFORE_VALIDATE yyii\base\ModelEvent基础类型的事件
事件开始时提出的validate().。你可以设置yii\base\ModelEvent::$isValid是假停止验证。
相关文章推荐
- Class yii\base\DynamicModel
- Class yii\base\ModelEvent
- Class yii\base\ActionFilter
- Class yii\base\InvalidRouteException
- Abstract Class yii\base\ErrorHandler
- [Django] Base class in the model layer
- Class yii\base\ActionEvent
- Class yii\base\Behavior
- Class yii\base\InvalidParamException
- Class yii\base\View
- Class yii\base\Action
- Class yii\base\InvalidConfigException
- Class yii\base\Response
- [Django] Base class in the model layer
- Class yii\base\ErrorException
- Class yii\base\InvalidCallException
- Class yii\base\Object
- Cannot use yii\base\Object as Object because 'Object' is a special class name
- Abstract Class yii\base\Request
- C# II: Class ViewModelBase and RelayCommand in MVVM