重复密码在Yii2中不起作用

Str*_*der 14 php yii yii2

我在模型中写了规则:

    public $password_repeat;

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        ....
        ....  
        ['password', 'required'],
        ['password', 'string', 'min' => 6],
        ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match" ],
    ];
}
Run Code Online (Sandbox Code Playgroud)

如果我使用不同的密码PasswordPassword Repeat领域,它提供了错误.所以,这意味着它有效.但问题是,如果Password Repeat字段为空,它不会给出任何错误.

ark*_*oak 24

同时为password_repeat添加必需的标记.如下所示

return [
        ....  
        ['password', 'required'],
        ['password', 'string', 'min' => 6],
        ['password_repeat', 'required'],
        ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match" ],
    ];
Run Code Online (Sandbox Code Playgroud)


小智 9

另一种方法是将$ skipOnEmpty变量设置为false:

return [
....  
    ['password', 'required'],
    ['password', 'string', 'min' => 6],
    ['password_repeat', 'compare', 'compareAttribute'=>'password', 'skipOnEmpty' => false, 'message'=>"Passwords don't match"],
];
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,如果密码中也包含值,则只允许重复密码字段.