代码之家  ›  专栏  ›  技术社区  ›  Masoud92m

Yii2表单验证-仅在填写密码字段时比较密码重复

  •  1
  • Masoud92m  · 技术社区  · 8 年前

    我的表单验证使用以下规则:

    [['password', 'password_repeat'], 'required'],
    ['password_repeat', 'compare', 'compareAttribute' => 'password', 'message' => "Passwords don't match"],
    

    如何编写规则 password_repeat 将其与 password 仅当用户填写时 暗语 领域如果用户跳过 暗语 ,验证 密码\u重复 也应跳过。

    1 回复  |  直到 8 年前
        1
  •  2
  •   rob006    8 年前

    你可以用 scenarios 为此:

    public function rules() {
        return [
            [['username', 'password'], 'required', 'on' => self::SCENARIO_LOGIN],
            [['username', 'password', 'password_repeat'], 'required', 'on' => self::SCENARIO_REGISTER],
            [
                'password_repeat', 'compare', 'compareAttribute' => 'password',
                'message' => "Passwords don't match", 'on' => self::SCENARIO_REGISTER,
            ],
        ];
    }
    

    这允许您为不同的表单设置不同的规则(登录和注册时需要不同的字段)。

    您还可以考虑使用自己的 rules() 喜欢 LoginForm RegisterForm .这实际上是一种更干净的解决方案,可以提供更多的控制。


    编辑

    对于条件规则,应使用 when 属性:

    public function rules() {
        return [
            [['password', 'password_repeat'], 'string'],
            [
                'password_repeat', 'compare', 'compareAttribute' => 'password',
                'message' => "Passwords don't match", 'skipOnEmpty' => false,
                'when' => function ($model) {
                    return $model->password !== null && $model->password !== '';
                },
            ],
        ];
    }