yii2自动验证.怎么添加只有添加记录时才生效的规则

yii2自动验证.怎么添加只有添加记录时才生效的规则,第1张

条件:①、有两个字段分别是A和B ②、A有两个值分别是1和2

需求是:当用户选择的A的值等于1的时候,B的值必须填写,当A的值等于2的时候,B的值不写也没关系。其中A必选。

首先在其关联model上加上下面这句规则

/**

* @inheritdoc

*/

public function rules()

{

return [

[['B'], 'requiredByASpecial'],

]

}

然后在该model里面去实现requiredByASpecial方法即可

/**

* 自定义验证B

*/

public function requiredByASpecial($attribute, $params)

{

if ($this->A== 1)

{

if ($this->B=== '')

$this->addError($attribute, "B的值不可以为空.")

}

}

上面的意思就是说当A等于1且B的值为空时,返回错误信息"B的值不可以为空"。

直接在Controller里面getModel(Model.class).save()即可

约定是表单提交的name为Model的className首字母小写.数据库属性名

1、首先我们在 model 里面定义一下场景 类名必须是 scenarios()

public function scenarios()

{

return [

'create' =>['title', 'image', 'content'],

'update' =>['title', 'content'],

]

}

2、好的,如上所示,场景的基本设置我们就已经完成一部分了,下面我们设置 rules() ,调用场景我们用 on 关键字

[['title', 'content'], 'required', 'on' =>['create', 'update']],

[['image'], 'required', 'on' =>'create'],

[['image'], 'image', 'enableClientValidation' =>true, 'maxSize' =>1024, 'message' =>'您上传的文件过

大', 'on' =>['create', 'update']],

on 指定的就是场景,一个场景用字符串,多个场景用数组

3、好的,model 里面我们就设置完毕了 现在开始调用吧。 Controller 里面

$model = $this->findModel($id)

$model->setScenario('update')or $model->scenario = 'update'


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11914698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存