Reputation: 12025
When I send wrong data to server using AJAX, Laravel checkes it and throw message error:
The given data was invalid.
My requests validation is:
class RegistrationRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function messages()
{
return [
'email' => 'required|email|unique:users',
'password' => 'required|min:6',
];
}
public function rules()
{
return [
'email' => 'required|email|unique:users',
'password' => 'required|min:6',
];
}
}
Using is:
public function register(RegistrationRequest $request){}
Handler exceptions is:
public function render($request, Exception $exception)
{
if ($exception instanceof ValidationException) {
return response()->json(['type' => 'error',
'codes' => [$exception->getMessage()]], 400);
}
return parent::render($request, $exception);
}
Upvotes: 0
Views: 273
Reputation: 41
If you want to customize the validation. Just add this function:
protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator){
$response = new JsonResponse([
'status' => false,
'errors' => $validator->errors()->all(),
], 200);
throw new \Illuminate\Validation\ValidationException($validator, $response);}
And dont forget use Illuminate\Http\JsonResponse;
Upvotes: 1
Reputation: 180126
That's what you told it to do in your exception handler when you overrode the default output to just display $exception->getMessage()
. That's the message for a ValidationException
.
The built-in exception handler already has handling for both AJAX requests that expect JSON results and ValidationException
s. If you're going to override it, you'll want to mimic that functionality... but in most cases you should just leave it alone.
The important bit of the default handler is this:
return response()->json([
'message' => $exception->getMessage(),
'errors' => $exception->errors(),
], $exception->status);
Upvotes: 1