根据官方文档来说,http://www.yiichina.com/doc/guide/2.0/input-validation#standalone-validators 需要对模型中定义规则的
rules方法指定使用范围,否者的话每一次调用保存都会调用这个方法
官方文档解释:
对于每个规则,你至少需要指定该规则适用于哪些特性,以及本规则的类型是什么。你可以指定以下的规则类型之一:
一个规则可用于验证一个或多个模型特性,且一个特性可以被一个或多个规则所验证。一个规则可以施用于特定场景(scenario),只要指定 当调用
基于以上验证步骤,有且仅有声明在 |
比如:我们 后台用户类 中定义了rules
/**
* 验证规则
* @return string 返回验证信息
*/
public function rules() {
return [
//填写用户名 密码 验证码 验证规则
['uname','required','message'=>'用户名不能为空'],
['upwd','required','message'=>'密码不能为空'],
['verifyCode','required','message'=>'验证码不能为空'],
[
'verifyCode', 'captcha',
'captchaAction'=>'login/captcha',
'message'=>'验证码不正确!'
],
];
}
我们在登录的时候是对的,如果我们在编辑用户信息的时候,保存的话是不会成功的,因为在编辑状态下没有验证码所以是失败的
有两种方法:
方法一:
我们在编辑用户的控制器中,save方法添加一个参数 false 即:save(false)这样说明程序不运行规则验证也是可以的
方法二:
那么我们就需要进行如下的修正,指定一个ON, on指的是model而不是控制器
/**
* 验证规则
* @return string 返回验证信息
*/
public function rules() {
return [
//填写用户名 密码 验证码 验证规则
['uname','required','message'=>'用户名不能为空', 'on'=>'login'],
['upwd','required','message'=>'密码不能为空', 'on'=>'login'],
['verifyCode','required','message'=>'验证码不能为空', 'on'=>'login'],
[
'verifyCode', 'captcha',
'captchaAction'=>'login/captcha',
'message'=>'验证码不正确!',
'on'=>'login'
],
];
}
这样我们在后台编辑用户的时候就不会运行这个规则
转载于:https://blog.51cto.com/dreameng/1650019