hmvc

12
HMVC en codeigniter El Modelo Vista Controlador (MVC) viene a ser una forma de trabajar que separa los datos de una aplicación, la interfaz de usuario, y la lógica de negocio en tres componentes distintos, el modelo, la vista y el controlador. Uno de los motivos del MVC es la reutilización de código. Aparte de el MVC también tenemos el Hierarchical-Model-View- Controller(HMVC), que viene a ser lo mismo pero para conseguir aplicaciones realmente escalables, se trata de lo siguiente: En vez de tener un sistema MVC, podemos tener muchos, o mejor dicho, tener muchos módulos. Cada módulo contiene o puede contener lo siguiente: Una carpeta controllers Una carpeta models Una carpeta views Una carpeta libraries Eso es lo que viene a ser un módulo, y dentro de cada carpeta es como si trabajamos con codeigniter, tenemos nuestros controladores, nuestras vistas y nuestros modelos, pero con algunas excepciones como veremos. Con esta breve explicación vamos a crear un pequeño proyecto en el que veremos como crear módulos, conectar el modelo la vista y el controlador y conectar un módulo con otro para tener la opción de poder reutilizarlos de forma realmente sencilla con una línea de código, empecemos. Creamos el proyecto

Upload: byron-delgado

Post on 23-Jan-2016

5 views

Category:

Documents


0 download

DESCRIPTION

g

TRANSCRIPT

Page 1: hmvc

HMVC en codeigniter

El Modelo Vista Controlador (MVC) viene a ser una forma de trabajar que separa los datos de una aplicación, la interfaz de usuario, y la lógica de negocio en tres componentes distintos, el modelo, la vista y el controlador. Uno de los motivos del MVC es la reutilización de código.Aparte de el MVC también tenemos el Hierarchical-Model-View-Controller(HMVC), que viene a ser lo mismo pero para conseguir aplicaciones realmente escalables, se trata de lo siguiente: En vez de tener un sistema MVC, podemos tener muchos, o mejor dicho, tener muchos módulos. Cada módulo contiene o puede contener lo siguiente: 

Una carpeta controllers Una carpeta models Una carpeta views Una carpeta libraries

 Eso es lo que viene a ser un módulo, y dentro de cada carpeta es como si trabajamos con codeigniter, tenemos nuestros controladores, nuestras vistas y nuestros modelos, pero con algunas excepciones como veremos. Con esta breve explicación vamos a crear un pequeño proyecto en el que veremos como crear módulos, conectar el modelo la vista y el controlador y conectar un módulo con otro para tener la opción de poder reutilizarlos de forma realmente sencilla con una línea de código, empecemos. 

Creamos el proyecto 

Nos vamos a la web de codeIgniter y nos descargamos la versión que hay disponible, la guardamos y la extraemos en nuestro directorio raíz, en mi caso C:\xampp\htdocs, una vez tengamos ya la carpeta con los archivos debemos cambiarle el nombre, le podemos poner hmvc_ci, sugiero que coloquen el mismo así será más sencillo seguir el tutorial.

 

Las librerías 

Descargar archivos

 

Como hemos dicho necesitamos crear nuestros módulos, pero para que estos funcionen primero

Page 2: hmvc

debemos crear la configuración.Una vez descargados los archivos cogemos los archivos de la carpeta core y los alojamos en applications/core, y con los de third_party lo mismo, los cogemos y los metemos en applications/third_party, con esto es suficiente. 

 

La base de datos

PHP

CREATE DATABASE IF NOT EXISTS usuarios;

1CREATE DATABASE IF NOT EXISTS usuarios;

PHP

CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(100) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

123456

CREATE TABLE IF NOT EXISTS `users` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `nombre` varchar(100) NOT NULL,  `password` varchar(255) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

 

El archivo .htaccess 

PHP

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /hmvc_ci/index.php/$1 [L] ErrorDocument 404 /hmvc_ci/index.php

123456

    RewriteEngine On    RewriteCond %{REQUEST_FILENAME} !-f    RewriteCond %{REQUEST_FILENAME} !-d

Page 3: hmvc

    RewriteRule ^(.*)$ /hmvc_ci/index.php/$1 [L]     ErrorDocument 404 /hmvc_ci/index.php

 

Ahora ya podemos acceder al proyecto desde aquí.

 

El archivo database.phpAhora debemos dirigirnos a nuestro archivo database.php que está en la carpeta config y modificar el código para que quede así, siempre dependiendo de nuestros datos de acceso a la base de datos.

PHP

$db['default']['hostname'] = 'localhost';//nuestro host $db['default']['username'] = 'root';//el usuario de nuestra base de datos $db['default']['password'] = '';//el password del usuario $db['default']['database'] = 'usuarios';//la base de datos que vamos a utilizar $db['default']['dbdriver'] = 'mysql'; $db['default']['dbprefix'] = ''; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE;

123456789101112131415

$db['default']['hostname'] = 'localhost';//nuestro host$db['default']['username'] = 'root';//el usuario de nuestra base de datos$db['default']['password'] = '';//el password del usuario$db['default']['database'] = 'usuarios';//la base de datos que vamos a utilizar$db['default']['dbdriver'] = 'mysql';$db['default']['dbprefix'] = '';$db['default']['pconnect'] = TRUE;$db['default']['db_debug'] = TRUE;$db['default']['cache_on'] = FALSE;$db['default']['cachedir'] = '';$db['default']['char_set'] = 'utf8';$db['default']['dbcollat'] = 'utf8_general_ci';$db['default']['swap_pre'] = '';$db['default']['autoinit'] = TRUE;$db['default']['stricton'] = FALSE;

 

Page 4: hmvc

El archivo autoload.phpAhora nos dirigimos al archivo autoload.php que está dentro de la carpeta config y en la línea 55 debemos modificar el código por éste.

PHP

$autoload['libraries'] = array('database');

1$autoload['libraries'] = array('database');

De esta forma cargamos automáticamente la base de datos. En la línea 67 modificamos por este otro.

PHP

$autoload['helper'] = array('url');

1$autoload['helper'] = array('url');

Con el helper url tendremos disponible las urls amigables y así podremos crear nuestra ruta.

El archivo config.phpAhora vamos a nuestra carpeta config y abrimos el archivo config.php, en la línea 17 colocaremos este código.

PHP

$config['base_url'] = 'http://localhost/hmvc_ci/';

1

$config['base_url'] = 'http://localhost/hmvc_ci/';

 Como vemos es la configuración de siempre, hasta aquí no hay cambios. 

Creando un modulo Ahora empiezan los cambios, lo primero que haremos será crear una carpeta que llamaremos modules dentro de la carpeta application, de igual forma que la llamamos modules la podemos llamar como queramos, esta será la carpeta donde guardaremos nuestro modulos.A continuación crearemos nuestro primer modulo y su estructura de directorios, veamos lo sencillo que es. Creamos una carpeta llamada login por ejemplo, este será el nombre de nuestro módulo, dentro deberemos crear 3 carpetas más, una llamada controllers, otra llamada models y otra llamada views. Esto será siempre igual para cada módulo, pudiendo añadir como veremos una carpeta para las librerías. Una vez hecho esto pasaremos a crear nuestro primer controlador para el módulo login,

Page 5: hmvc

veamos.

El controlador index.php Nos vamos a application/modules/login/controllers y creamos un archivo nuevo llamado index.php, dentro colocamos el siguiente y sencillo código.

PHP

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Index extends MX_Controller { public function __construct() { parent::__construct(); $this->load->model('index_model'); } public function index() { $data['users'] = $this->data_users(); $this->load->view('index',$data); } public function data_users() { return $this->index_model->get_users(); } public function saludo($saludo) { echo 'esto es un '. $saludo; } } /* *end modules/login/controllers/index.php */

123456789101112131415161718192021222324252627282930313233343536373839

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Index extends MX_Controller{        public function __construct()    {                parent::__construct();        $this->load->model('index_model');            }        public function index()    {                $data['users'] = $this->data_users();        $this->load->view('index',$data);                }        public function data_users()    {                return $this->index_model->get_users();            }        public function saludo($saludo)    {                echo 'esto es un '. $saludo;            }    

Page 6: hmvc

}/**end modules/login/controllers/index.php*/

Si nos fijamos sólo tenemos un ligero cambio con respecto a como venimos trabajando con codeigniter, y es que en vez de que nuestro controlador extieneda de CI_Controller, lo hace de MX_Controller, que es quién hace posible el uso de la arquitectura HMVC, así de fácil, no necesitamos saber más. Como vemos llamamos a un modelo, cargamos una vista, etc, todo es exactamente igual que siempre, de momento… 

El modelo index_model.phpNos vamos a application/modules/login/models y creamos un nuevo archivo llamado index_model.php, dentro colocamos el siguiente código. 

PHP

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Index_model extends CI_Model { public function __construct() { parent::__construct(); } public function get_users() { $query = $this->db->get('users'); return $query->result(); } } /* *end modules/login/models/index_model.php */

12345678910111213141516171819202122232425

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');class Index_model extends CI_Model{        public function __construct()    {                parent::__construct();            }        public function get_users()    {                $query = $this->db->get('users');                return $query->result();            }    }/**end modules/login/models/index_model.php*/

Page 7: hmvc

Aquí si que no tenemos ningún cambio, un modelo de lo más normal en codeigniter, así que pasamos a la vista index en la que simplemente veremos como llegan correctamente los datos, veamos. 

La vista index.php Nos vamos a application/modules/login/views y creamos un nuevo archivo llamado index.php, dentro colocamos el siguiente código. 

PHP

<h1>Nuestro primer módulo en codeigniter!!</h1> <?php foreach($users as $user) : ?> <p>Nombre: <?php echo $user->nombre ?> Password: <?php echo $user->password ?></p> <?php endforeach; ?>

1234567

<h1>Nuestro primer módulo en codeigniter!!</h1> <?php foreach($users as $user) : ?>        <p>Nombre: <?php echo $user->nombre ?> Password: <?php echo $user->password ?></p>    <?php endforeach; ?>

 Si no se muestran datos seguramente será porque debáis ingresar algún registro en la tabla users <img src="http://uno-de-piera.com/wp-includes/images/smilies/icon_biggrin.gif" alt="icon biggrin" class='wp-smiley' title="HMVC en codeigniter" />Si ahora apuntamos nuestro navegador aquí deberemos ver los resultados de nuestra consulta sin mayores problemas. Como vemos, para acceder a un módulo simplemente debemos colocar el servidor/nombre del módulo/controlador/función, como nuestra función es la función index no es necesario escribirla en la url, si por ejemplo se llamará registro, si que deberíamos acceder de la siguiente forma, http://localhost/hmvc_ci/login/index/registro. Ya hemos aprendido a crear un módulo, veamos ahora como llamarlo desde otro módulo, es fantástico. 

El modulo home Creamos un nuevo modulo llamado home, lo mismo que antes, dentro de modules una carpeta llamada home, y dentro las 3 carpetas, a saber, controllers, models y views. Con esto podemos pasar a crear nuestro controlador home. 

, 04/12/13,
HTML: <NOSCRIPT>
, 04/12/13,
HTML: </NOSCRIPT>
Page 8: hmvc

El controlador home.php Nos vamos a application/modules/home/controllers y creamos un archivo nuevo llamado home.php, dentro colocamos el siguiente y sencillo código.

PHP

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Home extends MX_Controller { public function __construct() { parent::__construct(); } //llamamos a la función data_users la cuál nos //entrega un array con los usuarios public function index() { //llamamos a otro modulo, la secuencia es modulo/controlador/método $data['users'] = Modules::run('login/index/data_users'); $this->load->view('home',$data); } //llamamos a una función que tiene un parámetro public function hola() { $data['saludo'] = Modules::run('login/index/saludo','saludo'); $this->load->view('saludo',$data); } }

123456789101112131415161718192021222324252627282930313233

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Home extends MX_Controller{        public function __construct()    {                parent::__construct();            }        //llamamos a la función data_users la cuál nos    //entrega un array con los usuarios    public function index()    {                //llamamos a otro modulo, la secuencia es modulo/controlador/método        $data['users'] =  Modules::run('login/index/data_users');         $this->load->view('home',$data);                }        //llamamos a una función que tiene un parámetro    public function hola()    {                $data['saludo'] = Modules::run('login/index/saludo','saludo');        $this->load->view('saludo',$data);            }    }

 

Page 9: hmvc

Como vemos más de lo mismo, otro controlador que extiende de MX_Controller, pero con la diferencia de que aquí llamamos a otro módulo. Llamar a un módulo es así de fácil: Modules::run(modulo/controlador/función, parámetros de la función si los tiene); Si si, así de fácil, en data['users'] tenemos la información que retorna el método data_users del controlador index del módulo login.Mostrarlo en pantalla será tan fácil como crear una vista llamada home.php en la carpeta views e imprimir el resultado, lo importante que es la reutilización de código, aquí podemos ver lo útil que puede llegar a ser.  La función hola es lo mismo, pero con la diferencia de que a la función saludo del controlador login le hemos pasado un parámetro, pues para pasarle el parámetro es así de fácil, cuando mostremos la variable saludo veremos ‘esto es un saludo’. Y eso es todo, espero que hayáis entendido como funciona el HMVC en codeigniter, que gracias a estas librerías es realmente sencillo, dejo los archivos para su descarga y cualquier duda relacionada con el tutorial intentaré ayudar en lo que pueda. Descargar proyecto hmvc_ci