【问题标题】:custom rule validation not working-Yii2自定义规则验证不起作用-Yii2
【发布时间】:2015-12-26 09:31:46
【问题描述】:

你能帮我解决这个问题吗?我确实阅读了文档,但规则仍然不起作用。我做错了吗?我仍在寻找一些例子,但仍然没有发生任何事情。我想验证用户的密码和 repeat_password 是否匹配。

这是我在模型中的代码。 在那种情况下,这两个也被声明为必需的。

[['password','password_repeat'], 'checkPassword', 'on'=>'create'],

该场景也在 actionCreate 上声明。

public function checkPassword($attributes, $params)
    {
        if(!$this->password_repeat === $this->password)
        {
           $this->addError($attribute, 'Passwords do not match!');
        }
    }

我确实尝试在这两个字段上使用compare 验证,但它不会让我满意。如果您只比较一个字段,则不会验证另一个字段。如果您同时验证它们,当您删除您在两个字段之一中输入的内容时,它们仍有可能相互对比。因此,我想创建一个,即使您删除了在这两个字段中输入的内容,无论谁先行,他们都将被验证。抱歉,添麻烦了。我希望你仍然得到我想要发生的事情。谢谢。

PS,我不想使用密码验证器小部件(?)。谢谢。

【问题讨论】:

  • 提示:在你的代码中有一个参数$attributes,它应该是$attribute
  • @robsch 仍然一无所获。它没有触发验证
  • 你的条件不对!应该是$this->password_repeat !== $this->password

标签: php validation yii2 custom-validators


【解决方案1】:

试试看

<?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?>

【讨论】:

    【解决方案2】:

    在您的代码中。

    $this->addError($attribute, 'Passwords do not match!');
    

    检查您的 varname $attribute,它在您的函数声明中不存在。

    public function checkPassword($attributes, $params)
    

    AddError 无法将错误分配给表单字段。

    【讨论】:

      【解决方案3】:

      您只需在 model 文件中使用此验证,例如...

      ['password', 'compare', 'compareAttribute'=>'password_repeat',  'message' => 'Your error message'],
      

      【讨论】:

      • 我可以将它与when 验证器一起使用吗?我仍然对compare 验证器不满意。 @bvp
      • 你只是在控制器文件中使用你的场景
      • $model->scenario = 'create';
      • $model= new Users(['scenario' =&gt; 'create']); 这是我控制器中的代码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      相关资源
      最近更新 更多