【问题标题】:Yii2 custom validation rule not workingYii2 自定义验证规则不起作用
【发布时间】:2016-10-15 15:42:31
【问题描述】:

我正在尝试为 yii2 中的模型编写一些自定义验证,但我无法弄清楚为什么验证总是是肯定的,尽管我的验证函数总是会添加一个错误。 例如规则

   public function rules()
{
    return [
       ...
        [['myattribute'], 'myvalidation'],
   ];
}

public function myvalidation($attribute, $params)
{
  $this->addError($attribute, "error");
}

validate() 函数仍然返回 true。有什么问题?

【问题讨论】:

  • 请在控制器中显示您使用 $model->validate() 的代码。我在我的 yii2 项目中使用了自定义验证器,目前还没有任何问题。

标签: validation yii2 rules


【解决方案1】:

在验证规则中添加 skipOnError => false

[
  ['myattribute', 'myvalidation',  'skipOnError' => false],
]

然后

$model->validate(); // should return false;

【讨论】:

    【解决方案2】:

    我会推荐你​​看这个lesson on custom rolesread docs 就可以了。这不是最好的视频教程,但这个人让它正常工作。

    在你的情况下:

    1.在[['myattribute'], 'myvalidation'],从这里删除多余的数组,使你的模型规则和自定义验证函数看起来像这样

    public function rules()
    {
        return [
           ...
            ['myattribute', 'myvalidation'],
       ];
    }
    
    public function myvalidation($attribute, $params)
    {
      $this->addError($attribute, "error");
    }
    

    没有错,但是当你有多个属性时使用它。

    2.然后转到您的表单并将 `` 放入您的 ActiveForm 中,使其看起来像这样

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

    我的意思是,如果你想在不重新加载(使用 ajax)的情况下验证它,你需要这样做。

    3.还将它添加到连接到视图的控制器操作中

    if(Yii::$app->request->isAjax && $model->load($_POST)) {
                Yii::$app->response->format = 'json';
                return \yii\widgets\ActiveForm::validate($model);
    }
    

    这将通过 ajax 验证您在表单中的输入,如果不是 ajax,这将不起作用。

    【讨论】:

      【解决方案3】:
      ['reg_date','validateDate', 'skipOnEmpty' => false, 'skipOnError' => false]
      

      将此添加到您的规则中

      public function validateDate($attribute,$params,$validator)
          {
              
                  $validator->addError($this,$attribute,"Bugungi sana bo'lishi kerak!");
          }
      

      像这样在你的控制器端检查这个

      if($model->validate()){
      echo "validate works";
      }
      

      【讨论】:

        猜你喜欢
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        相关资源
        最近更新 更多