HMVC: Aplicaciones modulares en CodeIgniter

Publicado: 18/04/2011 en CodeIgniter, desarrollo, HMVC, modules, php, Programación
Etiquetas:, , , ,

You can read the English version of this post in http://phpsblog.agustinvillalba.com/hmvc-modular-applications-codeigniter/

Hoy vamos a hacer una introducción a la modularización de aplicaciones en el framework CodeIgniter, utilizando para ello la extensión HMVC (Hierarchical Model View Controller o Modelo Vista Controlador Jerárquicos), de forma que nuestra aplicación gana en flexibilidad y podemos paralelizar el desarrollo entre varios desarrolladores una vez los módulos han sido diseñados, con el valiosísimo tiempo que ganamos.

Instalando HMVC en CodeIgniter

Lo primero que necesitamos para modularizar nuestra aplicación es descargarnos la extensión HMVC. Una vez la hemos descomprimido, nos encontramos con 2 carpetas:

core

third_party

colocamos la carpeta third_party (tal cual) dentro de la carpeta application de nuestra aplicación CodeIgniter. La ubicación final de la carpeta core dependerá de la versión de CodeIgniter que tengamos instalada. Por lo tanto, el contenido de la carpeta core irá en:

Si tenemos CodeIgniter 2.0

application/core

Si tenemos CodeIgniter 1.7.2

colocaremos el contenido de la carpeta core (3 archivos) dentro de la carpeta application/libraries

Bien, con esto tenemos instalada la extensión que nos permite modularizar nuestra aplicación, pero nos falta un último paso. Dentro de la carpeta application hemos de crear un directorio llamado modules. Este directorio (como su propio nombre indica) contendrá todos los módulos que desarrollemos.

Desarrollando módulos en nuestra aplicación

Una vez que está todo instalado y todos los directorios necesarios creados, podemos comenzar a desarrollar los módulos que darán funcionalidad a nuestra aplicación web. A partir de aquí, los límites los pone la creatividad y genialidad del programador, sólo existen algunas reglas que cumplir.

El nombre del directorio que contiene a nuestro módulo marcará el nombre de dicho módulo y por lo tanto, la url que el usuario verá en su barra de navegación. Es decir, que si el nombre de nuestro módulo es «modulo_alumnos», dentro del cual tenemos un directorio «controllers» con 2 controladores: «alumno» y «alumna», dentro de cada controlador tendremos una función llamada «soy_un_alumno» y «soy_una_alumna», la url final sería:

tuaplicaciónCI.com/index.php/modulo_alumnos/alumno/soy_un_alumno/(y a partir de aquí los parámetros) o tuaplicaciónCI.com/index.php/modulo_alumnos/alumna/soy_una_alumna/(parámetros)

También es importante remarcar que si tenemos un módulo llamado, por ejemplo, «usuario», el cual contiene un controlador llamado «usuario.php» (usuario/controllers/usuario.php) que a su vez contiene un método llamado, por ejemplo, «login», la url de acceso al método podría ser:

miaplicacionCI.com/index.php/usuario/usuario/login o miaplicacionCI.com/index.php/usuario/login

es decir, cuando el nombre del módulo y el nombre del controlador coinciden podemos obviar este último en la url de acceso. Pero sólo cuando coinciden.

Dentro del directorio modules la estructura de directorios que debemos seguir es la misma que nos encontramos en el directorio application, de ahí el nombre HMVC (MVC jerárquico). De forma que, como mínimo, hemos de tener un directorio controllers y un directorio views, además podremos tener un directorio models, o incluso un directorio «libraries», si necesitamos librerías específicas para nuestro módulo que otros módulos no necesitarán o no deberían tener acceso, un directorio «config», si nuestro módulo necesita ciertas variables de configuración que no son comunes a toda la aplicación, etc. También podemos crear dentro del directorio del módulo más directorios que no forman parte de la estructura habitual de «application», como podría ser un directorio «files», donde podríamos almacenar temporalmente ciertos archivos que un módulo en concreto genera, etc.

A partir de aquí los límites los marcan la creatividad y genialidad del desarrollador.

Para más ayuda, pueden echar un vistazo en https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home.

You can read the English version of this post in http://phpsblog.agustinvillalba.com/hmvc-modular-applications-codeigniter/

comentarios
  1. Cristhian Camilo (@galax13a) dice:

    oye agustin si no es mucha molestia dejarme tu twitter o algo para estar enterado de vos , gracias por el POST es genial!!

  2. Gayan dice:

    Great post buddy thanks to Google translator I was able to get my problems solved !

  3. maxi dice:

    I like the article but isn’t codeigniter 2.0 comes with hmvc by default?

  4. Carlos dice:

    Genial articulo Agustin! ¿tienes algun email con el que contactar? Es que tengo una duda referente a un articulo pasado tuyo que me lleva loco y no me gustaria ensuciartelo aqui en los comentarios de este articulo.

  5. Agustín, como siempre, un artículo sensacional que estoy seguro mucha gente aprovechará.

    Saludos.

Deja un comentario