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.

Acepto recibir anuncios de interes sobre este Blog.

Aprende a crear validaciones personalizadas para tus formularios en CodeIgniter 4

- Andrés Cruz

In english

) )