【问题标题】:Form Request, how to add additional error messages after performing a validation using an if- condition?表单请求,如何在使用 if 条件执行验证后添加额外的错误消息?
【发布时间】:2019-07-02 10:00:52
【问题描述】:

使用特定条件在表单请求中添加错误消息。

我正在发出表单请求以处理我的验证。在我的表单中,我有几个字段,但重要的是“月”“日”或“年”下拉。它们都设置为 required,如果其中一个使所需规则无效,表单请求将通过在 $validator 中创建另一个错误来处理它。

逻辑是这样的。

If (month = fail || day = fail || year = fail) {
   $validator->errors()->add('date', 'please fill out the whole date)
}

我想在验证后在我的表单请求中执行此操作。

这是我对表单请求字段的规则。

public function rules()
    {
        return [
            'name' => 'nullable',
            'sex' => 'nullable',
            'phone_number' => 'nullable',
            'email' => 'nullable',
            'month' => 'bail|required',
            'day' => 'bail|required',
            'year' => 'bail|required',
        ];
    }

在我的视图(树枝模板)下,在月、日、年的选择字段下,我应该显示我的错误消息:

{{errors.first('date')}}

到目前为止,我还不知道如何编写条件并添加自定义错误消息。

编辑:我找到了答案,但我不确定这是否是一种好习惯。也许有人能找到比这更好的答案。

protected function failedValidation(Validator $validator) {

        if (array_key_exists('month', $validator->failed()) || 
            array_key_exists('day', $validator->failed()) ||
            array_key_exists('year', $validator->failed()) ) {
                $validator->getMessageBag()->add('date', 'sample error message');
            }
}

【问题讨论】:

    标签: laravel validation


    【解决方案1】:

    我认为最好使用 After Validation Hook

    您通常会将其添加到您的表单请求中。

    /**
    * Configure the validator instance.
    *
    * @param  \Illuminate\Validation\Validator  $validator
    * @return void
    */
    public function withValidator($validator)
    {
        $validator->after(function ($validator) {
            if(
                $validator->errors()->has('month')
                || $validator->errors()->has('day')
                || $validator->errors()->has('year')
            ) {
                $validator->errors()->add('date', 'Please fill out the whole date!');
            }
        });
    }
    

    您可以查看documentation 了解更多信息。

    【讨论】:

    • 我还可以问一下在处理表单请求中的错误方面,使用 withValidator($validator) + after validation hook 与 failedValidation($validator) 有什么区别,因为两者都可以调用验证器实例。 laravel.com/api/5.7/Illuminate/Foundation/Http/FormRequest.html 表示 failedValidation($validator) 方法用于处理失败的验证请求。我只是好奇这些方法是否有任何重大差异、优点或缺点。
    • 在您的特定情况下,没有重大区别,因为您想知道验证器何时失败。但是,在验证后挂钩的情况下,您在验证器实际评估之前添加更多职责
    • 为帮助我的朋友干杯! :)
    • 关于上面的代码('忽略 if 语句'),我认为使用 $validator->errors()->add() 手动将错误添加到错误包会引发异常并无法通过验证。
    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2017-08-15
    相关资源
    最近更新 更多