Tutorial CodeIgniter 4º parte: Librerías y helpers

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

En la última entrada utilizamos la librería de validación y el ayudante (o helper) de formularios de CodeIgniter. Ambos están disponibles en cualquier instalación del framework, pero en este post aprenderemos a crear nuestros propios ayudante y librerías.

Librería vs helper

¿Qué diferencia hay entre una librería y un helper? Una librería suele ser una clase que aporta una serie de funcionalidades, y dichas funcionalidades comparten información. Por ejemplo, una librería que permita acceder al API de Twitter necesita que sus métodos compartan datos como la clave y el nombre de usuario, por ello lo ideal es tener una clase que permita guardar esa información. Por otro lado, un helper se puede entender como un grupo de funciones que, aunque compartan un ámbito de uso, son independientes entre sí. Un buen ejemplo de esto sería el ayudante de formularios de CodeIgniter.

Creando librerías

El primer paso será crear un fichero ‘Mi_libreria.php’ en ‘application/libraries’, y copiar el siguiente código. Por ahora, solo dispone de una función que devuelve la cadena “Hola Mundo”, pero será suficiente para aprender a cargarla y usar sus métodos:

1
2
3
4
5
6
7
8
9
<?php if ( ! defined('BASEPATH')) exit('No esta permitido el acceso');
//La primera línea impide el acceso directo a este script
class Mi_libreria {
    public function holaMundo(){
        return "Hola mundo.";
    }

}
?>

CodeIgniter nos indica las siguientes pautas a la hora de nombrar las líbrerias:

  • El nombre del fichero debe empezar por mayúscula.
  • El nombre de la clase debe empezar por mayúscula.
  • Los nombres de la clase y del fichero deben coincidir.
  • A continuación nos iremos al controlador ‘empleados.php’ que ya teníamos y añadiremos la siguiente función:

    1
    2
    3
    4
    function cargar_libreria(){
        $this->load->library('Mi_libreria');
        echo $this->mi_libreria->holaMundo();
    }

    Es importante resaltar que, para poder llamar a nuestra función holaMundo(), debemos utilizar el nombre de nuestra librería en minúsculas, si hubieramos hecho:

    1
    $this->Mi_libreria->holaMundo();

    Hubieramos recibido un error indicando que el objeto ‘Mi_libreria’ no existe. Por otro lado, a la hora de cargar la librería, CodeIgniter no diferencia si la primera letra esta en mayúscula o no.
    Ahora podemos comprobar su funcionamiento:
    librerias1

    Envío de parámetros a la librería

    Es muy probable que necesitemos enviar parámetros a la librería en el momento de cargarla, para ello, la función ‘load->library()’ permite pasarle un segundo argumento compuesto por un array asociativo. Para poder recibir estos datos, necesitaremos crear un constructor en la librería que reciba este array:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Mi_libreria {
        private $texto;
        public function __construct($params){
            $this->texto = $params['texto'];
        }
        public function holaMundo(){
            return $this->texto;
        }
    }

    Ahora nuestra librería devolverá el texto que se le ha pasado a la hora de cargarla, y en nuestro controlador tendremos que llamarla de la siguiente manera:

    1
    2
    3
    4
    $params = array(
        'texto' => 'Le estoy mandando datos al constructor'
        );
    $this->load->library('Mi_libreria', $params);

    Nuevamente, podemos comprobar su funcionamiento:
    librerias2

    Accediendo a los objetos de CodeIgniter

    Es posible acceder a los recursos de CI desde nuestra librería, aunque esto haga que deje de ser totalmente independiente del framework. Para ello, es necesario obtener el objeto CodeIgniter:

    1
    $CI =& get_instance();

    MUY importante pasar la función ‘get_instance()’ por referencia, de esta manera, se copiará la instancia existente de CodeIgniter en lugar de crear una nueva.
    Una vez hecho esto, podemos llamar a las funciones de CI igual que lo hacemos en los controladores o modelos, pero reemplazando el ‘$this’ por ‘$CI’:

    1
    2
    $CI->load->library('form_validation');
    $CI->load->model('empleados_model');

    Helpers

    Para crear un helper, debemos crear un fichero en ‘application/helpers’ (para nuestro ejemplo llamado ‘mi_helper.php’) y escribir en el nuestras funciones:

    1
    2
    3
    4
    5
    6
    7
    8
    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
        //Nos aseguramos de que no haya conflictos con otras funciones
        if(!function_exists('metodoPruebas')){
            function metodoPruebas(){
                return "El helper funciona!";
            }
        }
    ?>

    Podemos usarlo de la siguiente manera:

    1
    2
    3
    4
    function cargar_helper(){
        $this->load->helper('mi_helper');
        echo metodoPruebas();
    }

    La diferencia con las librerías es que no necesitamos llamar al helper a través del objeto ‘$this’.
    El helper en funcionamiento:
    librerias3

    Eso es todo, espero que haya sido de utilidad y nos vemos en los siguientes tutoriales.

    Desarrollador web y aficionado al desarrollo de videojuegos.

    Comentarios arrow 9 Comentarios
    1. Muy buenos tutoriales… he visto los demas y los he hecho!!! Están muy buenos y estoy esperando los próximos (espero no tarden!!!!!)

    2. Gracias!!, espero que te hayan servido, cualquier duda, no dudes en preguntar

    3. muy buenos los tutoriales hice cada uno de ellos y abrieron mi panorama sobre codeigniter espero publiques más, algunos temas interesantes serían codeigniter con angular ,paginación ,carga de archivos,cms.. muchas gracias Saludos

    4. Hola, gracias por el tutorial, mas sencillo imposible. Una duda, si quisiera manejar sesiones, es decir, un login sencillo con un nombre de usuario y contraseña y si los datos son correctos envie a un vista e incie sesion; sino, envia a vista con mensaje de error. Gracias.

      • Puedes usar la clase de sesiones para ello, y en el controlador que la invoca (el de login presumiblemente) puedes cargar una vista u otra (con “$this->load->view()”) dependiendo de si el login es correcto o no. Para el mensaje de error puedes usar Flash Sessions o pasarlo como parámetro al load->view() de la vista con el error.

        ¡Un saludo!

    5. Me han servido mucho los 4 tutoriales sobre Codeigniter, era justo lo que necesitaba para iniciarme en su manejo con el MVC

      Gracias y buen trabajo

    6. Miguel Angel Llamas Jáimez

      Muy buen trabajo. Si haces más sobre codeIgniter, te agradecería un montón que avisaras. Muy currado y muy clarito. Me han salido los ejemplos a la primera!!!!
      Muchas gracias.

    Responder a Alex Vixgeck Cancelar respuesta

    Tu e-mail no será publicado. Los campos marcados con un asterisco son obligatorios.