表单请求,使用if条件执行验证后,如何添加其他错误消息?

时间:2019-02-08 07:21:01

标签: laravel validation

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

我正在提出表单请求以处理我的验证。在我的表单中,我有几个字段,但重要的字段是“月”,“日”或“年”下拉列表。它们都设置为必填,如果其中之一使必需的规则无效,则表单请求将通过在$ 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');
            }
}

1 个答案:

答案 0 :(得分:0)

我认为最好使用验证钩之后

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

/**
* 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以获得更多信息。