从FormRequest Laravel会话重定向

时间:2019-11-18 02:55:18

标签: php laravel laravel-validation

我正在控制器内部执行验证,然后可以从该会话中返回消息。

return redirect()->back()
            ->withErrors($validator)
            ->with([
                'editModal' => 'editModal',
                'msg'       => $msg
            ]);

然后,我尝试在Laravel中使用FormRequestFormRequest可以使用,但是如果验证失败,我想通过会话发送一些数据。但是我找不到办法。我可以使用$validator->errors()->add发送消息,但是有没有办法像我在控制器中使用with()一样通过会话发送消息?

3 个答案:

答案 0 :(得分:1)

您可以在验证器错误中添加自定义错误

$validator->errors()->add('editModal', 'editModal');
$validator->errors()->add('msg', $msg);
return redirect()->back()->withErrors($validator);

在刀片中

@if($errors->any())
 <h4>{{$errors->first()}}</h4>
@endif

答案 1 :(得分:1)

FormRequest::failedValidation()方法抛出\Illuminate\Validation\ValidationException的实例以指示验证失败。

Illuminate\Foundation\Exceptions\Handler中有两种方法用于为这些异常构建响应。您需要覆盖invalid()invalidJson()这两个方法,以包括您的会话数据。

这些替代项属于您应用程序的异常处理程序,可在 app / Exception / Handler.php 中找到,并应如下所示:

protected function invalid($request, ValidationException $exception)
{
    return redirect($exception->redirectTo ?? url()->previous())
                ->withInput(Arr::except($request->input(), $this->dontFlash))
                ->withErrors($exception->errors(), $exception->errorBag)
                ->with([
                    'editModal' => 'editModal',
                    'msg'       => $msg
                ]);
}

protected function invalidJson($request, ValidationException $exception)
{
    return response()
        ->json([
            'message' => $exception->getMessage(),
            'errors' => $exception->errors(),
        ], $exception->status)
        ->with([
            'editModal' => 'editModal',
            'msg'       => $msg
        ]);

}

答案 2 :(得分:0)

花费时间后,我找到了一种通过会话发送消息的方法。只需在您使用的FormRequest类上添加此函数即可。

protected function failedValidation(Validator $validator)
{
    return redirect()->back()
        ->withErrors($validator)
        ->with([ //these are my messages
            'editModal' => 'editModal',
            'msg'       => $this->input()
        ]);
}

别忘了use Illuminate\Contracts\Validation\Validator;