I am working with L5 Form Requests and don't I just love Taylor! Well, I am doing some AJAX requests and I still want to retain my form requests. The problem is that in the case of a validation error the Validator just returns a 422 error response and flashes the errors, but my AJAX frontend expects a very specific format of response from server whether validation is successful or not.
I want to format the response on Validation errors to something like this
return json_encode(['Result'=>'ERROR','Message'=>'//i get the errors..no problem//']);
My problem is how to format the response for the form requests, especially when this is not global but done on specific form requests.
I have googled and yet not seen very helpful info. Tried this method too after digging into the Validator
class.
// added this function to my Form Request (after rules())
public function failedValidation(Validator $validator)
{
return ['Result'=>'Error'];
}
Still no success.
Currently accepted answer no longer works so i am giving an updated answer.
In the revelent FormRequest
use failedValidation
function to throw a custom exception
// add this at the top of your file
use Illuminate\Contracts\Validation\Validator;
use App\Exceptions\MyValidationException;
protected function failedValidation(Validator $validator) {
throw new MyValidationException($validator);
}
Create your custom exception in app/Exceptions
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Contracts\Validation\Validator;
class MyValidationException extends Exception {
protected $validator;
protected $code = 422;
public function __construct(Validator $validator) {
$this->validator = $validator;
}
public function render() {
// return a json with desired format
return response()->json([
"error" => "form validation error",
"message" => $this->validator->errors()->first()
], $this->code);
}
}
This is the only way I found. If there is a better approach please leave a comment.
This works in laraval5.5, I don't think this will work in laravel5.4 but i am not sure.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With