HMVC – Sistema modular en codeIgniter
Enviado por miguelcarmona :: 8 de enero de 2010

HMVC es un «plugin» que nos permite programar módulos bajo el framework php codeigniter.
En un principio, la librería nos permite tener para cada módulo los controladores, modelos, vistas y librerías que necesitemos. Es una librería realmente potente ya que incluso nos permite cargar la salida de una función de un controlador en otro controlador.
Página y archivo de descarga:
https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc
Instalación:
Nota: Este método es válido para la versión 1.x de codeIgniter. Para las versiones 2.x utilizar el método explicado en la página del proyecto.
Copiamos todos los archivos (Controller.php, Modules.php y MY_Router.php) en la ruta application/libraries.
Una vez copiados dichos archivos, creamos una carpeta llamada modules dentro de application y en su interior crearemos los módulos necesarios. Cada módulo deberá tener varias carpetas: config, controllers, models, libraries y views.
Lógicamente, dentro de controllers, meteremos los controladores, así como en las respectivas carpetas.
Funcionamiento básico:
Si el nombre y clase del controlador tiene el mismo nombre que la carpeta del módulo, este se llamará automáticamente cuando accedamos sólo especificando el nombre del módulo (ej: http://miaplicacion/modulo ó http://miaplicacion/modulo/funcion). En caso contrario, para acceder a dicho controlador lo haríamos así: http://miaplicacion/modulo/clase/funcion
La carpeta config sólo nos servirá (de momento) para:
- autoload.php: funcionamiento como el de codeigniter. Nos servirá para cargar automáticamente las librerías, modelos… necesarios para el módulo.
- routes.php: funcionamiento como el de codeigniter. Nos servirá para hacer la configuración de rutas y redirecciones para dicho módulo.
Cuando llamamos a una librería, modelo o vista, por defecto se busca dentro de la carpeta del módulo y si no se encuentra las busca en application y si tampoco las encuenta busca ya en último lugar en system.
Métodos básicos de funcionamiento:
El funcionamiento de cada módulo es como si fuese una aplicación diferente para cada uno.
Podemos recojer la salida del controlador/vista de otro módulo y guardarla o mostrarla según nos convenga (sólo para la versión php5). Sería como llamar a una vista pasándole como tercer parámetro TRUE.
$retorno = modules::run('modulo/controlador/funcion/', $parametro1, $parametro2, $parametro...);
Podemos cargar también un controlador como si fuese una librería:
$this->load->module('modulo/controlador', $parametro1, $parametro2, $parametro...);
$retorno = $this->controlador->funcion();
Aunque lo carguemos como una librería, el controlador cargado seguirá llamando a sus modelos, vistas y demás como si fuese independiente.
Para modelos, vistas y librerías, el funcionamiento es tal cual a codeigniter y podemos acceder a otros módulos anteponiendo el nombre del módulo al archivo:
$this->load->model('modulo/modelo_model');
En la página de la librería podemos encontrar algunos módulos ya desarrollados como una galería fotográfica, captcha, etc…