HMVC – Sistema modular en codeIgniter
Enviado por miguelcarmona :: 8 de enero de 2010
![codeIgniter codeIgniter](https://miguelcarmona.com/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png)
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…