viernes, 25 de noviembre de 2016

Uso del third_party: paquetes y módulos con CodeIgniter

 

codeigniter-logo

Con este artículo seguimos dando pasos de avance en la programación organizada de nuestros sitios, necesario sobre todo si queremos reutilizar en nuevas aplicaciones lo que vamos haciendo.

Para reutilizar el código con CodeIgniter, podemos usar dos formas organizativas: el empaquetamiento y la modularización.

Paquetes de recursos

Para empaquetar recursos podemos utilizar las facilidades de la clase Loader de CodeIgniter. Lo que voy a comentar puedes encontrarlo en el epígrafe “Application Packages” de la guía de usuarios de CodeIgniter.

¿Cuándo es útil empaquetar? Bueno, cuando tienes un conjunto de recursos como configuraciones, helpers, modelos, bibliotecas, configuraciones de lenguaje, etc… que se pueden agrupar en funciones comunes, y no los quieres tener regados dentro del directorio applications… por ejemplo, tienes helpers y bibliotecas para trabajar con la importación y exportación de excels, y no quieres que estén dentro de las carpetas helpers y libraries junto con los demás, pues puedes hacer un paquete y unirlos en una carpeta llamada por ejemplo “my_excel_pkg”. Supón que aquí he puesto mi biblioteca “Excel_pdf_manager”, comentada en mi artículo “Importando y exportando excel sobre CodeIgniter”.

Pues todo lo que debes hacer es poner la carpeta “my_excel_pkg” dentro del directorio “/application/third_party/”. El nombre de tu paquete sería “my_excel_pkg”.

Para usar el paquete, usas la función “add_package_path” de la clase Loader, así:

$this->load->add_package_path(APPPATH.'third_party/my_excel_pkg/');
$this->load->library('excel_pdf_manager');

$this->excel_pdf_manager->algun_metodo();

Cuando termines de usar los recursos de este paquete, o sobre todo si quieres usar recursos de otro paquete, eliminas el camino a tu paquete de la clase Loader con la función “remove_package_path”. Puedes pasar como parámetro el paquete que quieres desmontar, si no se especifica nada se desmonta el último paquete cargado:

$this->load->remove_package_path(APPPATH.'third_party/my_excel_pkg/');

Modularización con HMVC [2]

Como segunda variante de reutilización, tenemos el caso en que no solamente se trata de recursos, sino que además tenemos controladores y vistas que queremos reutilizar, y que se desea instalar en forma de módulos en nuevas aplicaciones.

Lo primero necesario es que el conjunto de código a modularizar cumpla con el criterio de módulo, es decir, que no tenga dependencias con el resto de la aplicación, sino más bien interfaces claras de comunicación, pero bien desacoplado.

En este caso, debes instalar la extensión HMVC de Codeigniter[1]. La instalación consiste en un compactado de dos carpetas: “core” y “third_party”. La carpeta “third_party” la copias directo en “application”, y si tienes Codeigniter 2.0 copias también “core” en “application”. Si tienes CodeIgniter 1.7.2 copias el contenido de “core” dentro de “application/libraries”.

Adicionalmente creas la carpeta “modules” en “application”.

Una vez que tengas las tres carpetas: application/core, application/third_party y application/modules listas, puedes comenzar a copiar los módulos en carpetas independientes dentro de la carpeta modules. Pongamos un ejemplo.

Supón que tenemos un módulo para manejar usuarios, con un controlador “usuarios” dentro de “usuarios.php”, una vista “mostrar_ usuarios.php” y un modelo “usuarios_model.php”. Todo esto lo ponemos en una carpeta “usuarios” dentro de “application/modules”, manteniendo la misma estructura de carpetas que hubieras tenido si los hubieras puesto directamente en “application”.

De hecho, HMVC quiere decir Hierarchical Model View Controller o Modelo Vista Controlador Jerárquico, es decir, que esta extensión cumple con la organización de modelo-vista-controlador de CodeIgniter.

Entonces, el módulo instalado quedaría así:

clip_image001

Fig. 1 Estructura del directorio del módulo instalado

Dentro del módulo de usuarios, es decir, de la carpeta, puedes poner todo lo demás que podrías poner en application, es decir, helpers, libraries, etc., que te sean necesarios para el funcionamiento independiente de tu módulo.

Con esto tenemos el módulo instalado (y para usarlo en otra aplicación solamente tendrías que copiar esta carpeta para el otro sitio!).

El uso de módulos, a diferencia de los paquetes, provoca un cambio en las URL, y por tanto debes tenerlo en cuenta en la navegación interna de tu sitio.

La diferencia es que ahora se coloca el nombre del módulo en la raíz del sitio, es decir, ahora se accede según la dirección:

http://misitio.com/index.php/usuarios/usuarios/funcion/parametros

Donde “/usuarios/usuarios” corresponde a “nombre_del_modulo/nombre_del_controlador”.

En el caso de que el controlador tenga el mismo nombre del módulo recortas la dirección a:

http://misitio.com/index.php/usuarios/funcion/parametros

Bueno, te he comentado sobre dos maneras de reutilizar el código con CodeIgniter, usando paquetes cuando quieres reutilizar recursos, o módulos cuando el funcionamiento abarca controladores y vistas.

De cualquier forma, ambas vías te ahorrarán esfuerzo y tiempo de desarrollo y te ayudarán a flexibilizar tu aplicación.

Referencias:

[1] Clase Load Guía del Usuario de CodeIgniter:

http://escodeigniter.com/guia_usuario/libraries/loader.html

[2] HMVC Aplicaciones modulares en CodeIgniter:

http://phpsblog.wordpress.com/2011/04/18/hmvc-aplicaciones-modulares-en-codeigniter/

[3] Descarga de la exensión HMVC:

https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc


[1] Puedes descargarla en: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

{ Leer Más }


IconIconIcon