我有一个活动表单,其中包含那些验证堆栈:
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'validateOnBlur' => false,
在模型中我的规则如下:
public $new_password;
public $current_password;
public function rules()
{
$rules = parent::rules();
$rules[] = ['password', 'required', 'on' => ['create', 'register']];
$rules['currentPasswordRequire'] = ['current_password', 'required', 'on' => ['update']];
$rules['currentPasswordValidate'] = ['current_password', function ($attr) {
if (!Password::validate($this->$attr, $this->password_hash)) {
$this->addError($attr, Yii::t('app', 'Invalid password'));
}
}, 'on' => ['update']];
return $rules;
}
它是来自dektrium扩展的用户模型(该模型扩展了基本的dektrium用户模型)。现在,当我尝试提交表单时,如果$current_password
为空,则客户端验证按预期工作。不要让我提交它。但是如果我用一些字符填充它(不是正确的密码)并且我提交它,则重新加载页面并且错误低于输入(无效的passowrd)。为什么第一条规则是由客户端验证处理而不是第二条规则处理的?提前谢谢!