Hacer callbacks a la Base de datos desde MY_Form_validation --Codeigniter--PHP--

Hola amigos, un saludo especial para todos
Este artículo nace por la necesidad de que he buscado en todos lados la solución a un tema que tenía con los callbacks de codeigniter, lo que me pasaba es que por mas que buscaba e intentaba una regla en especial no hacía el llamado a mi funcion con un callback así que busqué por todos los medios y lo solucioné de la siguiente manera:

Lo que pasa es que al hacer mi conjunto de reglas en el form_validation:

array(
            'field' => 'username',
            'label' => 'Usuario',
            'rules' => 'trim|required|callback_username_check|valid_email'
        ),

Hacía lo que hacía no llamaba a la función "username_check", para esto se tiene que crear dentro de:

../xammp/htdocs/mi_proyecto/aplication/libraries/


Se crea un archivo llamado "MY_Form_validation.php" de la siguiente manera:

<?php

class MY_Form_validation extends CI_Form_validation {

    public function __construct($rules = array()) {
        parent::__construct($rules);
        
        $this->ci = & get_instance();
        $this->ci->load->model('usuarios_model');
    }

    function username_check($str) {
        if ($this->ci->usuarios_model->check_email($str)) {
            $this->ci->form_validation->set_message('check_email', 'El correo ' . $str . 'ya se encuentra registrado');
            return FALSE;
        } else {
            return TRUE;
        }
    }

}

Nótese que la manera de cargar un modelo es poniendo las letras CI después de $this esto sucede porque vamos a cargar un modelo dentro de una librería, y previamente a esto ya debieron haber creado el modelo, para el ejemplo cree el modelo Usuarios_model

<?php

class Usuarios_model extends CI_Model {

    public function __construct() {
        parent::__construct();
    }

    function check_email($email) {

        $this->db->select('email_usuario')
                ->where('email_usuario', $email);
        $consulta = $this->db->get('usuarios');
        if ($consulta->num_rows() > 0) {
            return TRUE;
        }
    }


}

Luego de esto tienen que cambiar la manera de llamar a la función en el conjunto de reglas, se tiene que hacer sin anteponer la palabra callback_

array(
            'field' => 'username',
            'label' => 'Usuario',
            'rules' => 'trim|required|username_check|valid_email'
        ),

Y de esta manera queda solucionado el tema en cuestión.
Hacer callbacks a la Base de datos desde MY_Form_validation --Codeigniter--PHP-- Hacer callbacks a la Base de datos desde MY_Form_validation --Codeigniter--PHP-- Reviewed by Unknown on 8:08:00 Rating: 5

No hay comentarios:

Con la tecnología de Blogger.