【问题标题】:yii2 file required custom validationyii2 文件需要自定义验证
【发布时间】:2021-02-24 14:22:52
【问题描述】:

我有一个表单,可以在其中配置字段所需的验证规则并将其存储在模型中。

在呈现表单时,我创建了如下(简化)的验证规则,效果很好。

$view_parameters = $competition_article->view_parameters;

if (!empty($view_parameters) && is_array($view_parameters)) {

    foreach ($view_parameters as $parameter_key => $parameter_value) {

       $field_name = $parameter_value['name'];
       $field_required = $parameter_value['required'];

       if ($field_required) {
            Validator::createValidator('required', $model, [$field_name]);
       }

    }

}

对于表单提交,我使用自定义验证规则。这适用于除文件附件之外的所有内容。

    public function rules()
    {
        $rules =  [
   
   
            [['firstname', 'surname', 'closeststore', 'email', 'phone', 'response', 'attachment'],
             'dynamicValidator',
             'skipOnEmpty' => false 
            ],

            [['attachment'], 'file', 
             'extensions' => 'pdf, jpeg, jpg, doc, docx', 
              'checkExtensionByMimeType'=>false
            ],

        ];

        return $rules;

    }

在自定义验证方法上,我单独处理文件。 我试过了 a) addError() 并返回 false b) createValidator() 和 validateAttribute() 对,适用于文本字段。

    public function dynamicValidator($attribute, $params, $validator )
    {

        $view_parameters = $this->view_parameters;

        if ($view_parameters[$attribute]['required'])

            $validator = new Validator();

            if ($attribute == 'attachment') {
                if (empty($_FILES['CompetitionForm']['name']['attachment']))
[$attribute]);
                $this->addError( $attribute, 'Please include your attachment to enter.');
                // NOTE : Adding the validator has no effect
                // $validator =  $validator->createValidator('required', $this,               
                // $validator->validateAttribute($this, $attribute);

                return false;

            }

            $validator =  $validator->createValidator('required', $this, [$attribute]);

            $validator->validateAttribute($this, $attribute);

        }


    }

尽管到达了代码,但在需要附件并且调用 addError() 或 createValidator() 时不会引发错误。

如果没有附加文件并且需要附件,我如何无法通过验证?

【问题讨论】:

    标签: yii2 yii2-model yii2-validation


    【解决方案1】:

    您可以使用 skipOnEmpty 尝试使用此附件验证规则。

    [['attachment'], 'file', 
     'skipOnEmpty' => false, 
     'extensions' => 'pdf, jpeg, jpg, doc, docx', 
     'checkExtensionByMimeType'=>false
     ],
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多