Callbacks: Estableciendo nuestras propias funciones de validación

El sistema de validación admite nuestras propias funciones para validar datos, que se invocan mediante funciones **callback**. Esto nos permite extender la clase de validación para adaptarla a nuestras necesidades. Por ejemplo, si la cuenta de correo de un usuario debe ser única podemos crear una función callback que compruebe si la cuenta de correo existe o no en la tabla usuarios. Si existe devolvemos un FALSE y si no existe devolvemos TRUE. Vamos a crear un ejemplo para ello:

Lo primero que vamos a hacer es crear un método llamado **_comprobar_email()** que tendrá el siguiente aspecto:

function _comprobar_email ($email)
{
   if ( $email == '[email protected]') {
      $this->form_validation->set_message(
         '_comprobar_email',
         'Ya existe ese email');

      return FALSE;
   }
   return TRUE;
}

Este método recibe una variable **$email** como parámetro y comprueba si es igual a ''[email protected]''. Si se cumple la comprobación, el método devuelve un valor FALSE, si no devolverá TRUE. Normalmente, estos métodos suelen devolver TRUE o FALSE ya que se utilizan para comprobar si es correcto el valor de un campo.

En el controlador, añadimos la siguiente regla al campo **email**:

$this->form_validation->set_rules('email', 'Email',
   'trim|required|valid_email|xss_clean|callback__comprobar_email');

Recargamos la página y enviamos el formulario con el email '[email protected]'. Vemos como el valor del campo email se envía al método callback para que realice la comprobación adecuada.

Ejemplo de funcionamiento del callback _comprobar_email()

Para invocar a un método callback debemos anteponer la cadena ''**callback_**'' al nombre del método. En nuestro caso, el método se llama **_comprobar_email** para que no pueda ser accedida desde la URL, es decir, no será una acción propia del controlador si no que es como si fuera un método ''privado'' del controlador. Ojo, no podemos definirla como privada porque el objeto de validación no podría acceder a ella. Si la definimos como privada pasaría lo siguiente:

Fatal error: Call to private method Usuarios::_comprobar_email()
   from context 'CI_Form_validation' in ...

También podemos procesar los datos del formulario que se pasa al callback. Si nuestro callback devuelve algo más que un valor booleano TRUE o FALSE lo datos deberían ser procesados nuevamente.

results matching ""

    No results matching ""