This is the creepiest thing I have ever fixed in Laravel. I can't even imagine that in Laravel we can have such creepy problem. But anyways other than this I really like Laravel framework.
First let me explain the problem. In our Laravel 5.5 application we have added exception handling in app/Exceptions/Handler.php file
public function render($request, Exception $exception)
{
Redirect::to('admin/errorPage')->send();
}
Now the problem was in case of form validations it was throwing ValidationException so in case of returning back to form it always took me to the error page and I am not able to see what are the validation issues. Now that was really strange. So there were two options . First, I have to remove server side validations so it does not throw ValidationException and we shall do all client side validations. Or find out some other way to handle this.
So after 3 to 4 hours of struggle of going though framework code and documentation and online help I finally figure out the solution. Here are steps to add it.
1) Step 1 : Add ValidationException in dontReport field in app/Exceptions/Handler.php
protected $dontReport = [
//
\Illuminate\Validation\ValidationException::class
];
2) Step 2 : Update the render method declaration
public function render($request, Exception $exception)
{
if($this->shouldReport($exception)){
Redirect::to('admin/errorPage')->send();
}else{
return $this->convertValidationExceptionToResponse($exception, $request);
}
}
So here first we are checking if the current exception to be reported or not by checking shouldReport function
If not to be reported then we are using convertValidationExceptionToResponse method of super class to generate the response and send it back.
Please note that this solution will only work
First let me explain the problem. In our Laravel 5.5 application we have added exception handling in app/Exceptions/Handler.php file
public function render($request, Exception $exception)
{
Redirect::to('admin/errorPage')->send();
}
Now the problem was in case of form validations it was throwing ValidationException so in case of returning back to form it always took me to the error page and I am not able to see what are the validation issues. Now that was really strange. So there were two options . First, I have to remove server side validations so it does not throw ValidationException and we shall do all client side validations. Or find out some other way to handle this.
So after 3 to 4 hours of struggle of going though framework code and documentation and online help I finally figure out the solution. Here are steps to add it.
1) Step 1 : Add ValidationException in dontReport field in app/Exceptions/Handler.php
protected $dontReport = [
//
\Illuminate\Validation\ValidationException::class
];
2) Step 2 : Update the render method declaration
public function render($request, Exception $exception)
{
if($this->shouldReport($exception)){
Redirect::to('admin/errorPage')->send();
}else{
return $this->convertValidationExceptionToResponse($exception, $request);
}
}
So here first we are checking if the current exception to be reported or not by checking shouldReport function
If not to be reported then we are using convertValidationExceptionToResponse method of super class to generate the response and send it back.
Please note that this solution will only work
No comments:
Post a Comment