Validación
La validación en Laravel permite asegurar que los datos enviados por el cliente cumplan con reglas definidas antes de ser procesados o almacenados en la base de datos. Esto protege la integridad de la información y previene errores o vulnerabilidades.
Validación en controladores
Laravel ofrece el método $request->validate() para validar los datos directamente en los controladores:
use Illuminate\Http\Request;
public function store(Request $request)
{
$validated = $request->validate([
'nombre' => 'required|string|max:255',
'email' => 'required|email|unique:usuarios,email',
'password' => 'required|min:6'
]);
$usuario = Usuario::create($validated);
return response()->json($usuario, 201);
}
Si la validación falla, Laravel devuelve automáticamente una respuesta JSON (en APIs) o redirige con errores en aplicaciones web.
Form Request para validación avanzada
Se pueden crear clases de Form Request para centralizar la validación:
php artisan make:request StoreUsuarioRequest
Ejemplo de regla de validación en la clase generada:
public function rules()
{
return [
'nombre' => 'required|string|max:255',
'email' => 'required|email|unique:usuarios,email',
'password' => 'required|min:6'
];
}
En el controlador, se utiliza la clase en lugar de $request:
public function store(StoreUsuarioRequest $request)
{
$usuario = Usuario::create($request->validated());
return response()->json($usuario, 201);
}
Mensajes personalizados
Se pueden definir mensajes de error personalizados en la clase Form Request:
public function messages()
{
return [
'nombre.required' => 'El nombre es obligatorio',
'email.email' => 'Debe ingresar un correo válido'
];
}
Buenas prácticas y convenciones
- Validar siempre los datos recibidos antes de procesarlos o guardarlos.
- Usar
$request->validate()para reglas simples y Form Requests para validaciones complejas o reutilizables. - Definir reglas claras y mensajes personalizados para mejorar la experiencia del usuario.
- Mantener la lógica de validación separada de la lógica de negocio.
- Usar tipos de datos y formatos correctos para campos sensibles (email, fechas, contraseñas).