Saltar al contenido

La validación de Laravel siempre devuelve 200 OK de API

Solución:

Debe asegurarse de enviar la solicitud con el Accept: application/json encabezamiento.

Sin eso, Laravel no detectará que es una solicitud de API y no generará la respuesta 422 con errores.

La forma correcta de mostrar errores de validación utilizando inyectado FormRequest el objeto es anular failedValidation.

Como se indicó anteriormente en la sección de comentarios, inyectado FormRequest El objeto valida la solicitud por sí mismo, no es necesario validarla por segunda vez en el cuerpo del controlador (ese es uno de los principales beneficios). Si la validación falla, no presionará el cuerpo del controlador de todos modos.

Crea una clase abstracta que se extienda FormRequest y anular failedValidation.

<?php

namespace AppHttpRequests;

use IlluminateContractsValidationValidator;
use IlluminateFoundationHttpFormRequest;
use IlluminateHttpExceptionsHttpResponseException;
use IlluminateHttpResponse;

abstract class BaseFormRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    abstract public function rules(): array;

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    abstract public function authorize(): bool;

    /**
     * Handle a failed validation attempt.
     *
     * @param  Validator  $validator
     *
     * @return void
     */
    protected function failedValidation(Validator $validator): void
    {
        $errors = $validator->errors();

        throw new HttpResponseException(response()->json([
            'errors' => $errors
        ], Response::HTTP_UNPROCESSABLE_ENTITY));
    }
}

Ahora puedes extender BaseFormRequest en todas sus API, solicite clases de validación. Los errores de validación ahora se mostrarán como un mensaje codificado JSON con un código HTTP de entidad no procesable (422).

Fuente: https://medium.com/@Sirolad/laravel-5-5-api-form-request-validation-errors-d49a85cd29f2

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *