Tutorial CodeIgniter 4º parte: Librerías y helpers

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:
[cc]

[/cc]
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:
    [cc]
    function cargar_libreria(){
    $this->load->library(‘Mi_libreria’);
    echo $this->mi_libreria->holaMundo();
    }
    [/cc]
    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:
    [cc]
    $this->Mi_libreria->holaMundo();
    [/cc]
    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:
    [cc]
    class Mi_libreria {
    private $texto;
    public function __construct($params){
    $this->texto = $params[‘texto’];
    }
    public function holaMundo(){
    return $this->texto;
    }
    }
    [/cc]
    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:
    [cc]
    $params = array(
    ‘texto’ => ‘Le estoy mandando datos al constructor’
    );
    $this->load->library(‘Mi_libreria’, $params);
    [/cc]
    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:
    [cc]
    $CI =& get_instance();
    [/cc]
    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’:
    [cc]
    $CI->load->library(‘form_validation’);
    $CI->load->model(‘empleados_model’);
    [/cc]

    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:
    [cc]

    [/cc]
    Podemos usarlo de la siguiente manera:
    [cc]
    function cargar_helper(){
    $this->load->helper(‘mi_helper’);
    echo metodoPruebas();
    }
    [/cc]
    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.