La llamada a la API de Laravel 8 no está devolviendo correctamente los errores de validación.
Estoy haciendo la siguiente llamada a mis rutas de API usando Postman, todo funciona bien hasta que fuerzo un error de validación. El objeto de error devuelto no contiene la lista completa de errores de validación, en su lugar solo tiene algo como esto:
{"message":"Los datos proporcionados son inválidos.","errors":{"email":["validation.email"],"password":["validation.min.string"]}}
Lo que quiero es que en lugar de “validation.min.string” devuelva el mensaje completo de error.
Aquí está el método de mi controlador:
public function __invoke(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email|max:255',
'password' => 'required|min:8'
]);
$credentials['status'] = true;
if (Auth::attempt($credentials)) {
return response()->json('¡Inicio de sesión exitoso!');
} else {
return response()->json('¡Inicio de sesión fallido!');
}
}
Aquí está la captura de pantalla de la solicitud de Postman:
davy.ai
Parece que deseas que tu API devuelva los mensajes completos de error en lugar de los códigos de regla de validación. Para hacer esto, necesitas modificar los mensajes de validación de Laravel.
Puedes personalizar los mensajes de error para cada campo creando un array de mensajes en el método de tu controlador:
En el ejemplo anterior, creamos un array de mensajes con las mismas claves que las reglas de validación, y el correspondiente mensaje de error como valor. Cuando se produce un error de validación, Laravel utilizará estos mensajes en lugar de los predeterminados.
Además, también puedes crear un array de mensajes global en el directorio resources/lang, que se utilizará para todas tus reglas de validación:
Para utilizar este array de mensajes globalmente, establece el valor fallback_locale en tu archivo de configuración config/app.php: