Yii2中如何使用scenario场景,使rules按不同运用进行字段验证
当创建news新闻form表单时:
添加新闻的时候执行create动作。
必填字段:title-标题,picture-图片,description-描述。 这时候在model里News.php下rules规则这样定义:
public function rules()
{
return [
[['title', 'description', 'picture', ], 'required',],
];
}
但是更改的时候 只需要 [[‘title’, ‘description’], ‘required’], 就可以了, 少了 image 字段 表单就无法提交,这个问题如果解决呢?
那scenario场景就可以上场了
可以在app\models\News.php定义一个场景代码如下(也可以不定义):
public function scenarios()
{
return [
'create'=>['title','description','picture'],
'update'=>['title','description'],
];
}
注意:
如果在模型中定义了public function scenarios(),那么之后对该模型只能设置自定义的这些scenario名称(该案例只能使用model->scenario = ‘create’、model->scenario = ‘update’);
如果没有在模型中定义public function scenarios(),只需on数据有相关scenario名称即可命中规则(此时model->scenario 可设置成任意想要的场景名称),为了简便,我一般不设置;
修改rules规则:
public function rules()
{
return [
[['title', 'description', ], 'required','on'=>['create','update'],'message'=>'不能为空'],
[['picture'], 'required', 'on' => 'create'],
];
}
在create动作下添加:
$model->scenario = 'create';
在update动作下添加:
$model->scenario = 'update';