Saltar al contenido principal

Validación

La validación en Lumen es fundamental para asegurar que los datos recibidos en las solicitudes HTTP cumplan con las reglas definidas antes de ser procesados o almacenados en la base de datos. Esto ayuda a mantener la integridad de la información y a evitar errores o vulnerabilidades.

Validación en controladores

Lumen permite validar datos directamente en los controladores usando el método validate del objeto Request:

use Illuminate\Http\Request;

$router->post('/usuarios', function (Request $request) {
$this->validate($request, [
'nombre' => 'required|string|max:50',
'email' => 'required|email|unique:usuarios,email',
'edad' => 'nullable|integer|min:18'
]);

// Si la validación pasa, se puede crear el usuario
return response()->json(['mensaje' => 'Datos válidos']);
});

En este ejemplo, Lumen verifica que:

  • nombre sea obligatorio, tipo string y máximo 50 caracteres.
  • email sea obligatorio, tenga formato válido y sea único en la tabla usuarios.
  • edad sea opcional, pero si se envía, debe ser un número entero mayor o igual a 18.

Mensajes de error personalizados

Se pueden personalizar los mensajes de error para cada regla de validación:

$messages = [
'nombre.required' => 'El nombre es obligatorio.',
'email.email' => 'El correo debe tener un formato válido.'
];

$this->validate($request, [
'nombre' => 'required|string|max:50',
'email' => 'required|email',
], $messages);

Validación en Form Request (opcional)

Aunque Lumen es minimalista y no incluye nativamente las Form Request como Laravel, se puede crear clases personalizadas para manejar la validación y mantener los controladores delgados.

Buenas prácticas y convenciones en validación

  • Validar siempre los datos de entrada, tanto en APIs como en formularios web.
  • Mantener las reglas de validación claras y consistentes.
  • Devolver errores en formato estructurado (JSON) con códigos HTTP adecuados (por ejemplo, 422 Unprocessable Entity).
  • Evitar lógica de validación dentro de los controladores cuando sea compleja; delegar a servicios o clases específicas.
  • Reutilizar reglas de validación comunes para mantener consistencia entre distintas rutas o controladores.