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:
nombresea obligatorio, tipo string y máximo 50 caracteres.emailsea obligatorio, tenga formato válido y sea único en la tablausuarios.edadsea 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.