POV
POV

Reputation: 12025

Why Laravel validation returns always the default message?

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

Answers (2)

HieuMinh
HieuMinh

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

ceejayoz
ceejayoz

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 ValidationExceptions. 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

Related Questions