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
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter