Php 重复密码在Yii2中不起作用

Php 重复密码在Yii2中不起作用,php,yii,yii2,Php,Yii,Yii2,我在模型中编写了如下规则: public $password_repeat; /** * @inheritdoc */ public function rules() { return [ .... .... ['password', 'required'], ['password', 'string', 'min' => 6], ['password_repeat', 'compar

我在模型中编写了如下规则:

    public $password_repeat;

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

如果我在
password
password Repeat
字段中使用不同的密码,则会出现错误。所以,这意味着它是有效的。但问题是,如果
passwordrepeat
字段为空,它不会给出任何错误。

也为Password\u Repeat添加所需的标记。如下所示

return [
        ....  
        ['password', 'required'],
        ['password', 'string', 'min' => 6],
        ['password_repeat', 'required'],
        ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match" ],
    ];

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

return [
....  
    ['password', 'required'],
    ['password', 'string', 'min' => 6],
    ['password_repeat', 'compare', 'compareAttribute'=>'password', 'skipOnEmpty' => false, 'message'=>"Passwords don't match"],
];

这样做的好处是,如果密码中也有值,则只允许您将重复密码字段设置为必需。

我们不需要在
Yii.1.*
中使用
required
。你能告诉我为什么我们需要在
Yii2
中使用吗?Yii和Yii2有很多未记录的差异,因为Yii2是从零开始独立构建的。这只是其中之一。你需要提到重复密码时的必填项,如['password_repeat','required',],非常棒-谢谢。对于其他尝试此操作的人,您需要向模型中添加公共变量,否则表单将声明错误。即:公共$password\u repeat