根据官方文档来说,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' ], ]; }
这样我们在后台编辑用户的时候就不会运行这个规则