Curso de Laravel 5
Curso de Laravel 5
¡INSCRÍBETE A CUALQUIER CURSO CON UN 50% DE DESCUENTO PARA NUEVOS CLIENTES!

Implementar HMVC en laravel 4 es sencillo gracias a un fantástico paquete que tenemos a nuestra disposición.

El concepto de HMVC(Hierarchical model–view–controller) es sencillo de entender si entendemos el MVC(model–view–controller), simplemente es para que nuestras aplicaciones estén lo más desacopladas posibles, ganar en escalabilidad y un mejor entorno de desarrollo con varios programadores trabajando en el mismo proyecto, sobre todo si hacemos uso de control de versiones, tales como github o subversion, en los que seguro que más de uno se ha pisado alguna vez con algún compañero :).

Hace algún tiempo vimos en este tutorial el HMVC pero para codeigniter, si te interesa, te invito a visitarlo.

Laravel 4, como no, tiene un paquete que trabaja muy bien y es bastante sencillo de utilizar, la forma de utilizarlo es la siguiente.

Lo primero que deberemos hacer será crear la carpeta modulos, o como queramos llamarle dentro del directorio app, y dentro de élla, todos los modulos que necesitemos, por ejemplo, nosotros crearemos uno, el modulo Auth, y dentro tendremos la siguiente estructura de directorios y archivos:

  • Controllers
  • Views
  • Migrations
  • routes.php
  • module.json

Si necesitamos más los podemos añadir, pero nosotros con éstos tendremos suficiente, es así de sencillo, así que veamos un ejemplo práctico de como hace un login de usuarios haciendo uso de HMVC en laravel 4.

Implementar HMVC en laravel 4

Abrimos el archivo composer.json y en el objeto require añadimos la siguiente línea:

A continuación ejecutamos composer update en la terminal para que nuestro paquete sea instalado.

Abrimos el archivo app/config/app.php y en el array providers añadimos el siguiente elemento:

Crear el directorio modules

Nuestro módulo para este ejemplo se va a llamar modules, así que añadimos en el array classmap del objeto autoload alojado en el archivo composer.json la siguiente línea para que el directorio sea mapeado:

Una vez hecho, podemos crear el directorio modules dentro del directorio app, a la altura de Controllers y Views.

Actualizar la estructura de directorios del proyecto

Para que nuestro nuevo directorio sea mapeado correctamente, debemos ejecutar el siguiente comando en la terminal.

Crear el modulo Auth

Si hemos seguido correctamente los pasos anteriores, estamos en disposición de crear nuestro módulo, así que creamos el directorio Auth dentro de modules y dentro los siguientes directorios y archivos:

  • Controllers
  • Views
  • Migrations
  • routes.php
  • module.json

El archivo module.json contiene un objeto con una clave llamada enabled y acepta un boolean, o true o false, si es true, el módulo será escaneado y reconocido correctamente, en otro caso, no, así que abrimos este archivo y dentro añadimos el siguiente código.

De esta forma, el módulo será reconocido por el sistema, pero para que ésto sea así, debemos ejecutar el siguiente comando en la terminal.

La base de datos

Crea una base de datos llamada hmvc o como quieras, y abre el archivo app/config/database.php y modifica la clave mysql con los datos de tu conexión.

Migraciones

Ahora nos dirigimos de nuevo a la terminal, y escribimos el siguiente comando para crear una migración para la tabla users.

Si abrimos el directorio de nuestro módulo llamado Migrations, veremos que ha sido creada correctamente, ahora es el turno de llenarla y ejecutarla, así que abrimos el archivo, y añadimos el siguiente código, con el cuál se creará la tabla con un nuevo usuario para hacer pruebas.

Ejecutar una migración en un módulo es tan sencillo como escribir la siguiente línea en la terminal.

El controlador Auth

Creamos un nuevo archivo en el directorio Controllers dentro del módulo llamado AuthController.php y dentro añadimos el siguiente código.

Como podemos ver, simplemente muestra una vista, procesa el formulario de login, y hace el logout del usuarios, todo ésto debemos hacerlo usando el espacio de nombres namespace App\Modules\Auth\Controllers ya que es donde estamos.

El formulario de login

Ahora creamos el archivo login.blade.php en el directorio Views de nuestro módulo, y dentro añadimos el siguiente código el cuál simplemente muestra un formulario.

El controlador Dashboard

Ahora creamos otro controlador, el cuál simplemente mostrará una vista si hemos iniciado sesión correctamente dando la bienvenida al usuario, así que creamos el archivo DashboardController.php dentro de controllers y dentro colocamos el siguiente código.

Y a continuación creamos un directorio en Views llamado dashboard y dentro creamos un archivo llamado index.blade.php, que es el que muestra la función getHome del controlador Dashboard.

El archivo routes.php

Ahora sólo nos queda redirigir los controladres correctamente para poder acceder y enviar el formulario de login, así que abrimos el archivo routes.php alojado en nuestro módulo y añadimos el siguiente código.

Como último detalle, sólo nos queda escanear de nuevo el módulo, ya que hemos creado nuevos archivos y añadido funcionalidades, ésto siempre lo debemos tener en cuenta, o no funcionará correctamente, así que nos dirigimos a la terminal y escribimos de nuevo:

Si ahora nos dirigimos a http://localhost/hmvc/public/auth/login(mi ejemplo se llama hmvc, reemplázalo por el tuyo), debemos ver el formulario de login.

Si ves un error como No hint path defined for [auth], reemplaza return View::make(‘auth::login’); por return View::make(‘Auth::login’);.

Me ha salido este error en dos proyectos exactamente iguales, y es por un tema de case sensitive, así que si lo tienes, con éso lo puedes solucionar.

Y éso es todo, espero que te sea de ayuda, saludos.