La validación de datos es fundamental en cualquier aplicación web. Laravel ofrece mecanismos básicos como reglas en formularios o
FormRequest, pero hay técnicas más avanzadas que pocos tutoriales cubren. En este artículo descubrirás cinco enfoques potentes para validar datos de forma flexible y segura en tus proyectos Laravel.1. Validaciones condicionales (“sometimes” con lógica personalizada)
Laravel ya ofrece la regla
sometimes, pero puedes combinarla con callbacks para aplicar validaciones solo si se cumplen ciertas condiciones.$request->validate([ 'telefono' => [ 'required_if:contacto_preferido,telefono', function ($attribute, $value, $fail) use ($request) { if ($request->input('pais') === 'MX' && ! preg_match('/^[0-9]{10}$/', $value)) { $fail("El número de teléfono debe tener 10 dígitos para México."); } } ], ]);
2. Reglas personalizadas reutilizables (Custom Rule Objects)
En lugar de escribir lógica en controladores, crea clases que extiendan
Illuminate\Contracts\Validation\Rule. Esto mejora la legibilidad y el mantenimiento.class CodigoPostalMX implements Rule { public function passes($attribute, $value) { return preg_match('/^[0-9]{5}$/', $value); } public function message() { return 'El código postal debe tener 5 números.'; } }
Y luego en tu validación:
$request->validate([ 'codigo_postal' => ['required', new CodigoPostalMX()], ]);
3. Validaciones dinámicas basadas en contexto
Puedes construir reglas “sobre la marcha” según otros inputs, contexto del usuario o configuración:
$reglas = ['nombre' => 'required|string|max:255']; if ($request->has('edad')) { $reglas['edad'] = 'required|integer|min:18'; } $request->validate($reglas);
Esto te da flexibilidad para manejar distintas rutas o escenarios con un solo punto de validación.
4. Validar colecciones de entradas (arrays) con reglas complejas
Si recibes un array de objetos o datos anidados, puedes usar
array.*.campo y reglas de “bajo nivel”:$request->validate([ 'items' => 'required|array', 'items.*.producto_id' => 'required|exists:productos,id', 'items.*.cantidad' => 'required|integer|min:1', ]);
También puedes agregar reglas personalizadas para cada elemento o entre elementos comparativos.
5. Validación después de autorización (post-validation hooks)
Laravel permite ejecutar lógica tras la validación con los métodos
withValidator o after:public function withValidator($validator) { $validator->after(function ($validator) { if ($this->input('fecha_inicio') > $this->input('fecha_fin')) { $validator->errors()->add('fecha_fin', 'La fecha de fin debe ser posterior a la fecha de inicio.'); } }); }
Así puedes hacer comparaciones o verificaciones que dependen de múltiples campos.
Conclusión
Estas técnicas te permiten ir más allá de la validación básica en Laravel, construyendo aplicaciones más robustas y adaptadas a reglas complejas del negocio. A medida que tus proyectos crezcan, estas estrategias te ayudarán a mantener el código limpio, modular y fácil de extender.