php

Validación en PHP, usando Valitron

En este post te mostraré a validar los datos que el usuario ingresa en PHP ya sea a través de un formulario o de otras fuentes; usando la librería Valitron, que funciona muy bien para validar en PHP.

El repositorio de esta librería está aquí, y su uso es simple, además de que no requiere ningún framework o dependencia externa.

Un extra que tiene esta librería de validación de PHP es que permite mostrar los mensajes en idioma español.

Nota: el código que se expone aquí, es decir, la demostración, está en mi GitHub.

Ventajas de Valitron

Como lo dije, esta librería permite un uso simple pero poderoso. Las ventajas son:

  • Obtener los errores como un arreglo, útil si queremos mostrarlos en un formulario o como respuesta a una mal llamada a la API
  • No tiene dependencias
  • Provee un método para saber si los datos son o no válidos
  • Tiene reglas de validación predefinidas

Instalar Valitron

Esta librería, como muchas otras, se instala usando Composer; si no cuentas con Composer mira en este post cómo instalarlo.

Cuando lo tengas instalado ejecuta lo siguiente:

composer require <span>vlucas/valitron</span>

O en tu archivo composer.json dentro de dependencies agrega:

<span class="pl-s"><span class="pl-pds">"</span>vlucas/valitron<span class="pl-pds">"</span></span><span>: </span><span class="pl-s"><span class="pl-pds">"</span>^1.4<span class="pl-pds">"</span></span>

Después ejecuta composer update.

Ahora carga el autoload con:

require "vendor/autoload.php"

Validar formularios con Valitron

Ahora veamos cómo usar esta magnífica librería de validación de formularios.

Idioma español

Comienza indicando el idioma de los mensajes de validación:

<?php
require __DIR__ . '/vendor/autoload.php'; #Cargar todas las dependencias
use Valitron\Validator as V;
V::langDir(__DIR__ . "/vendor/vlucas/valitron/lang");
V::lang('es');

Como ves, el archivo de traducciones está incluido en el mismo repositorio. Este código debe ser ejecutado en el inicio de tu app, antes de hacer las validaciones.

Primer validación

Una validación queda así de simple:

<?php
$v = new \Valitron\Validator($_POST);
$v->rule("required", "nombre");
if ($v->validate()) {
    echo "OK";
} else {
    var_dump($v->errors());
}

Analicemos. Primero creamos un validador, pasándole un arreglo de datos que se van a validar.

En este caso los datos son $_POST, que es un arreglo que tiene claves y valores (recuerda que podría ser cualquier otro arreglo). Por ejemplo:

["nombre"] => "Luis"

Este validador tomará esos índices y los comparará con las reglas.

Las reglas se agregan con:

$v->rule("nombre de regla", "posición en arreglo");

También se pueden agregar todas las reglas de una vez con el método rules:

$v->rules($arregloDeReglas);

Para saber si los datos son válidos o no, se invoca al método validate que regresa un true o false.

Finalmente, si se desean mostrar los errores, se pueden obtener con el método errors.

Por favor fíjate en que este método devuelve un arreglo de arreglos, ya que agrupa los errores por campos.

Así que, si quieres mostrar a todos los errores, simplemente recorre los arreglos y luego recorre cada arreglo (en los ejemplos se ve de mejor manera)

Esto es todo lo que necesitas saber sobre la validación de formularios con Valitron, abajo dejaré un ejemplo. Si quieres indagar más sobre el tema, mira esto.

Ejemplo de validación en PHP con Valitron

Vamos a crear un formulario que más tarde será validado. Las reglas son:

  • Edad es obligatoria, debe ser un número, y mayor que 17: regla required, numeric y min
  • Correo es obligatorio, y debe ser un correo válido: regla required y email
  • Nombre es obligatorio: regla required
  • La contraseña y la confirmación de la contraseña deben coincidir: regla equals

Recuerda que el arreglo $_POST es llenado usando el atributo name del input del formulario, así que este valor debe ser igual que el que coloques al validar.

El formulario queda así:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Validación de formularios</title>
</head>

<body>
    <h1>Validación con PHP</h1>
    <a href="//parzibyte.me/blog">By Parzibyte</a>
    <br>
    <br>
    <form method="POST" action="procesar.php">
        <input type="text" name="nombre" placeholder="Tu nombre">
        <br><br>
        <input type="number" name="edad" placeholder="Tu edad">
        <br><br>
        <input type="email" name="correo" placeholder="Correo electrónico">
        <br><br>
        <input type="password" name="pass1" placeholder="Contraseña">
        <br><br>
        <input type="password" name="pass2" placeholder="Confirma
                contraseña">
        <br><br>
        <input type="submit">
    </form>
</body>

</html>

Para procesarlo y validarlo se usa esto:

<?php
require __DIR__ . '/vendor/autoload.php'; #Cargar todas las dependencias
# Establecer idioma
use Valitron\Validator as V;
V::langDir(__DIR__ . "/vendor/vlucas/valitron/lang");
V::lang('es');

# Validar

# Instanciamos, indicando el arreglo que vamos a validar. En este caso es $_POST
$v = new \Valitron\Validator($_POST);

# Agregamos todas las reglas
# La sintaxis es:
# $v->rule("nombre_de_regla", "campo_de_arreglo")

# Se requieren todos los campos
$v->rule("required", ["nombre", "edad", "correo", "pass1", "pass2"]);

# El correo debe ser un correo
$v->rule("email", "correo");

# pass1 y pass2 deberían ser iguales
$v->rule("equals", "pass1", "pass2");

# La edad debería ser un número
$v->rule("numeric", "edad");
# Y ser mayor que 17
$v->rule("min", "edad", 17);

# Después de agregar todas las reglas, intentamos validar

# Hacer validación. Regresa true o false
if ($v->validate()) {
    echo "OK, datos correctos";
} else {
    # Si no es válido, mostramos los errores

    $errores = $v->errors();
    echo "<h2>Corrige lo siguiente:</h2>";

    foreach ($errores as $conjuntoDeErrores) {
        foreach ($conjuntoDeErrores as $error) {
            echo $error . "<br>";
        }
    }
}

Fíjate en todas las reglas de validación que se agregan; en este caso es una a una, pero como te dije, podrías invocar a rules pasándole un arreglo con las reglas.

Dentro del ejemplo también se muestra cómo recorrer el arreglo de errores.

Ahora veamos la demostración:

Validar datos con PHP y Valitron

Conclusión

Valitron también ofrece la posibilidad de agregar validaciones personalizadas, así que es totalmente extensible y si las reglas que tiene no son suficientes para nosotros, podemos crear más.

No olvides que no solo podemos validar formularios, también se pueden validar otros arreglos, por ejemplo, puedes validar tu API usando esta librería y JSON.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

10 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

7 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

7 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

7 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

7 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

7 días hace

Esta web usa cookies.