Laravel validator throws an exception instead of redirecting back
Solution 1
Update your App\Exceptions\Handler
class
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Illuminate\Foundation\Validation\ValidationException;
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
AuthorizationException::class,
HttpException::class,
ModelNotFoundException::class,
ValidationException::class,
];
I also recommend you to read the docs how to migrate to laravel 5.2, because there were some breaking changes. For example this, ValidatesRequests
trait throws
Illuminate\Foundation\Validation\ValidationException
instead of Illuminate\Http\Exception\HttpResponseException
Documentation how to migrate from Laravel 5.1 to 5.2
Solution 2
Example from laravel docs. You can use Validator facade, for custom validation fails behaviour
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// Store the blog post...
}
Solution 3
This is how I handle it in Laravel 5.3 (by modifying Handler.php
)
https://stackoverflow.com/a/42852358/3107185
Solution 4
For laravel 5.2 I had to add this line:
if ($e instanceof ValidationException)
{
return redirect()->back()->withInput();
}
In App\Exceptions\Handler.php,and the following headers:
use Illuminate\Session\TokenMismatchException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\AuthenticationException;
DB93
Updated on June 18, 2022Comments
-
DB93 almost 2 years
After I upgraded to Laravel 5.2 I encountered a problem with the laravel validator. When I want to validate data in a controller take for example this code.
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class ContactController extends Controller { public function storeContactRequest(Request $request) { $this->validate($request, [ '_token' => 'required', 'firstname' => 'required|string' 'lastname' => 'required|string' 'age' => 'required|integer', 'message' => 'required|string' ]); // Here to store the message. } }
But somehow when I enter unvalid data it will not redirect me back to the previous page and flash some messages to the session but it will trigger an exception and gives me a 500 error page back.
This is the exception I get. I have read in the documentation that the ValidationException is new instead of the HttpResponseException but I don't know if it has anything to do with this.
[2016-01-05 11:49:49] production.ERROR: exception 'Illuminate\Foundation\Validation\ValidationException' with message 'The given data failed to pass validation.' in /home/vagrant/Code/twentyre-webshop/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php:70
And when I use a seperate request class it will just redirect back with the error messages. It seems to me only the validate method used in a controller is affected by this behaviour.
-
jedrzej.kurylo over 8 yearsThis won't give the OP the result they need - it won't redirect to previous page and flash validation errors.
-
DB93 over 8 yearsI did add the ValidationException to the dontReport property but it didn't fix my problem. I have read the migration documents and applied all the changes to my project but this is the only thing that is failing for me.
-
brad over 7 yearsThis has nothing to do with the question.
-
Robbie over 7 yearsI had the same problem as the question. "Laravel validator throws an exception instead of redirecting back". That's the problem I was having. I fixed it with the solution above. There might be more than one cause for this error therefore more than one answer. I posted to help someone who is struggling with this error like I was.