HMVC: Como tener una app mas modular y ordenada en Code Igniter
Una de las cosas mas difíciles al usar el CI(Code Igniter) es decidir como vas a ordenar tus controladores,modelos,vistas,etc. Cuando trabajas con varias personas te das cuenta que cada una tiene su forma muy particular de ordenar las cosas y aveces es difícil ponerse de acuerdo o acostumbrarse a otras formas. Esto se podría solucionar fácil con HMVC.HMVC es una extensión para crear módulos independientes para CI es decir cada modulo tendrá su propio controlador su propio modelo sus propias librerías y ayudantes. Todo esto se pone en application/modules/tumodulo siguiendo la estructura de directorios de application/. Todo esto ayuda a tener un orden y así pasar de tener todas los controladores,modelos,vistas,etc revueltas en un solo directorio o usar subdirectorios(que aveces causan problemas x()
Con la rama 4.0.X del HMVC hay que crear un controlador para que cargue el modulo que se quiere, ademas de crear una entrada en el routes.php, ademaaas de que XD hay que hacer unos sucios hacks para que trabajen bien los módulos da error al querer pesarle parámetros a los métodos. PEROOO todo esto se soluciona con la rama 4.1.X
Ya a lo practico hagamos una app con tos módulos.
Lo primero es instalar el HMVC que lo pueden descargar de aquí. Para instalarlo solo se descomprime y los archivos Controller.php y MY_Router.php en el directorio libraries y los otros dos en helpers.
system/
application/
libraries/
Controller.php
MY_Router.php
helpers/
modules_helper.php
debug_helper.php
modules/
home/
controllers/
home.php
views/
home.php
user/
controllers/
user.php
views/
home.php
Esta seria nuestra estructura de directorios y archivos. A partir de ahora crearemos un modulo para cada controlador:
<?php
class Home extends Controller
{
function __construct(){
parent::Controller();
}
function index(){
return $this->load->view('home');
}
}
<h1>Modulo home</h1>
Este modulo solo carga una vista, pero hay que notar dos cosas con esta nueva versión la clase del controlador Home hereda de Controller(recuerdan el que Controller.php extiende la clase Controller del CI) y ya no mas de Module y la otra es que en la nueva versión de CI ya no se cierra el tag <?php cuando haces un modulo o controlador lol(para mas dudas sobre eso lean el Changelog).
<?php
class User extends Controller
{
function __construct(){
parent::Controller();
}
function index(){
$data = array('content' => "user");
return $this->load->view('home',$data);
}
function lol($arg){
$data = array('content' => $arg);
return $this->load->view('home',$data);
}
}
<?=$content?>
Y esta seria el segundo modulo con su controlador y su vista.
Para ver que trabaje solo tendremos que ir a las siguientes url:
dominio.lo/index.php/home
dominio.lo/index.php/user
dominio.lo/index.php/user/lol/foobar
!Así de simple ahora!
buena info (y)
Insisto con lo mismo... PHP es como el patito feo. Muy rudimentario, como en la edad de piedra.
Se presume que se hace un desarrollo rápido con PHP... Prefiero trabajar con JSF con el Visual Web Pack de NetBeans o con alguna otra implementación de JSF+Ajax como IceFaces que de igual forma trae plugin para trabajarlo con NetBeans de forma visual... Además, los componentes estan monos ^-^... Eso si es productividad [o] - [o] y si conjuntamos con Hibernate y Spring tenemos una clara separación de capas
...