Validaciones personalizadas en CodeIgniter 4

Las validaciones en CodeIgniter 4 son un punto fundamental en cualquier aplicación y en CodeIgniter 4 no es la excepción; poder validar nuestra data para poder estar seguros de que es válida y segura; son procesos que tenemos que llevar a cabo en nuestras aplicaciones; pero seguramente existen validaciones que son un poco más específicas para tu negocio y por ende no puedes emplear las genéricas que nos ofrece el framework; en esos casos, tenemos que crear una nosotros mismos; en CodeIgniter 4 lo podemos hacer fácilmente y con las mismas evitamos ensuciar de más el controlador que es donde generalmente las colocamos; tenemos que ir al archivo de:

config/Validation.php
En ella, veremos definidas una serie de clases:
public $ruleSets = [
\CodeIgniter\Validation\Rules::class,
\CodeIgniter\Validation\FormatRules::class,
\CodeIgniter\Validation\FileRules::class,
\CodeIgniter\Validation\CreditCardRules::class,
];

Las cuales puedes revisar y veras que son clases con funciones, los nombres de las funciones corresponden a las validaciones que podemos emplear y las mismas reciben un argumento, que como puedes suponer es el parámetro de validación; ya todo este mapeo se encarga el framework por nosotros; en mi ejemplo (que forma parte de mi curso completo en CodeIgniter 4 que puedes tomar en esta plataforma) vamos a crear un archivo dentro de:

app/validator/UserRules

Vamos a crear una carpeta extra que llamamos /app/Validation (puede tener cualquier nombre y dentro de la misma un archivo llamado UserRules (o el nombre que prefieras):

<?php
namespace App\Validation;
use App\Models\UserModel;
class UserRules
{
}

Y dentro de este archivo y clases, creamos nuestras funciones de validación a las cuales les aplicamos nuestras validaciones; lógicamente, tienen que devolver un booleano, true si pasa la validación y falso en caso contrario:

    public function provider(string $userId): bool
    {
        return $this->checkType($userId, "provider");
    }
    public function customer(string $userId): bool
    {
        return $this->checkType($userId, "customer");
    }

Para usarlas, basta con:

        $res = $this->validate([
            'user_id' => 'required|customer'
        ]);

Extra, crear validaciones con pase de parámetros

También podemos crear validaciones más generales en la cual podamos pasar un parametro o mas mediante la definicion de la validacion:

$res = $this->validate([
            'user_id' => 'required|checkType[customer]',
        ]);

Y en nuestra clase:

   public function checkType($userId, $type)
    {
        $userModel = new UserModel();
        $user = $userModel->asObject()->where("type", $type)->find($userId);
        return $user != null;
    }

Conclusiones

De tal manera que ya sabes cómo puedes emplear validaciones personalizadas y un poco más que eso, pasar parámetros a las validaciones personalizadas.

- Andrés Cruz

In english
Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.