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.
Como lo dije, esta librería permite un uso simple pero poderoso. Las ventajas son:
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"
Ahora veamos cómo usar esta magnífica librería de validación de formularios.
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.
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.
Vamos a crear un formulario que más tarde será validado. Las reglas son:
required
, numeric
y min
required
y email
required
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:
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.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.