Delirios de un Informático

Cómo añadir nuevas reglas de validación en Code Igniter

Code Igniter trae de serie una sencilla pero potente librería para la validación de formularios, con una serie de reglas de validación predefinidas. Es posible añadir nuevas reglas externas a la librería creando nuevos métodos en el controlador, pero si esas reglas han de reutilizarse en más de un controlador el principio DRY no se cumple.

La solución pasa por extender la librería nativa añadiendo nuevos métodos que equilvaldrán a nuevas reglas. Por ejemplo, para poder realizar una comprobación con la nueva regla valid_url se extendería la clase nativa del siguiente modo:

<?php

class MY_Form_validation extends CI_Form_validation
    {
    function valid_url($url)
        {
        return (bool) preg_match('/^http:\/\/', $url);
        }
    }

Después, la comprobación se realizaría así:

$this->form_validation->set_rules('url', 'lang:url_incorrecta', 'valid_url');

En caso de ser necesario, puede utilizarse $ci =& get_instance(); para obtener una instancia del controlador y poder utilizar así otras librerías o modelos que puedan ser necesarios. Por supuesto, este truco también sirve para sustituir las reglas de validación nativas 🙂

Actualización: esto puede resultar particularmente útil para crear una regla que permita comprobar la existencia de un elemento en la base de datos cuando un campo que el usuario debe introducir es UNIQUE.