posts/977Xv2q6Q91Ftk8MjtgPEMGR6E0LYceurMUhFxjq.png

5 técnicas de validación en Laravel que no verás en tutoriales comunes

Explora 5 estrategias avanzadas de validación en Laravel más allá de lo habitual: validaciones condicionales, reglas dinámicas, validaciones basadas en contexto y más.

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.

Comparte esta publicación

0 comentarios

Únete a la conversación y comparte tu experiencia.

Dejar un comentario

Comparte dudas, propuestas o mejoras para la comunidad.