需要 YII 验证规则 - 需要的规则如何工作
YII validation rules required - how required rule works
我刚开始使用 Yii,我不了解模型规则中的必需规则何时或如何工作。
我有一篇关于 cols 的文章 table
标题,slug,body,created_at。
slug 和 created_at 列是在 php 中生成的,因此它们不是必需的 不是创建表单的一部分。如果我将 created_at 留在所需的规则中,它会抛出一个错误,因为缺少值。但是如果我在 required 规则中留下 slug 它不会抛出错误并且它有效。但是 slug 没有值,因为它稍后在 Php.
中生成
所以问题是,是否在 POST 数据上验证了所需的规则,或者何时将其插入数据库或...?
这是带有规则和行为的模型代码:
public function rules()
{
return [
//[['title', 'created_at', 'body'], 'required'], // THIS THROWS AN ERROR cause created_at is not in POST
[['title', 'slug', 'body'], 'required'], // THIS SHOULD THROW AN ERROR cause slug is not in POST but it works. Why?
[['body'], 'string'],
[['created_at', 'updated_at', 'created_by'], 'integer'],
[['title', 'slug'], 'string', 'max' => 100],
[['created_by'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['created_by' => 'id']],
];
}
public function behaviors()
{
return [
TimestampBehavior::class,
[
'class' => BlameableBehavior::class,
'updatedByAttribute' => FALSE,
],
[
'class' => SluggableBehavior::class,
'attribute' => 'title',
]
];
}
SluggableBehavior
和 TimestampBehavior
使用不同的事件:
SluggableBehavior
正在使用 ActiveRecord::EVENT_BEFORE_VALIDATE
,因此在 验证之前会生成 slug,因此 required
规则不会抱怨缺少 slug,因为它是不再为空。
TimestampBehavior
正在使用 ActiveRecord::EVENT_BEFORE_INSERT
和 ActiveRecord::EVENT_BEFORE_UPDATE
事件,这些事件在 验证后执行,因此目前带有日期的验证字段是空。
我刚开始使用 Yii,我不了解模型规则中的必需规则何时或如何工作。
我有一篇关于 cols 的文章 table 标题,slug,body,created_at。
slug 和 created_at 列是在 php 中生成的,因此它们不是必需的 不是创建表单的一部分。如果我将 created_at 留在所需的规则中,它会抛出一个错误,因为缺少值。但是如果我在 required 规则中留下 slug 它不会抛出错误并且它有效。但是 slug 没有值,因为它稍后在 Php.
中生成所以问题是,是否在 POST 数据上验证了所需的规则,或者何时将其插入数据库或...? 这是带有规则和行为的模型代码:
public function rules()
{
return [
//[['title', 'created_at', 'body'], 'required'], // THIS THROWS AN ERROR cause created_at is not in POST
[['title', 'slug', 'body'], 'required'], // THIS SHOULD THROW AN ERROR cause slug is not in POST but it works. Why?
[['body'], 'string'],
[['created_at', 'updated_at', 'created_by'], 'integer'],
[['title', 'slug'], 'string', 'max' => 100],
[['created_by'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['created_by' => 'id']],
];
}
public function behaviors()
{
return [
TimestampBehavior::class,
[
'class' => BlameableBehavior::class,
'updatedByAttribute' => FALSE,
],
[
'class' => SluggableBehavior::class,
'attribute' => 'title',
]
];
}
SluggableBehavior
和 TimestampBehavior
使用不同的事件:
SluggableBehavior
正在使用ActiveRecord::EVENT_BEFORE_VALIDATE
,因此在 验证之前会生成 slug,因此required
规则不会抱怨缺少 slug,因为它是不再为空。TimestampBehavior
正在使用ActiveRecord::EVENT_BEFORE_INSERT
和ActiveRecord::EVENT_BEFORE_UPDATE
事件,这些事件在 验证后执行,因此目前带有日期的验证字段是空。