我正在控制器内部执行验证,然后可以从该会话中返回消息。
return redirect()->back()
->withErrors($validator)
->with([
'editModal' => 'editModal',
'msg' => $msg
]);
然后,我尝试在Laravel中使用FormRequest
。 FormRequest
可以使用,但是如果验证失败,我想通过会话发送一些数据。但是我找不到办法。我可以使用$validator->errors()->add
发送消息,但是有没有办法像我在控制器中使用with()
一样通过会话发送消息?
答案 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;