Si alguna vez te has preguntado lo que es el patrón de programación diseño MVC y nunca te has atrevido a preguntarlo, aquí tienes una aportación que te va a abrir un mundo de nuevas posibilidades.
¿Qué es MVC y por qué lo adorarás?
MVC, Modelo-Vista-Controlador es un método con el que separarás la lógica del programa, el diseño de la aplicación y de los cálculos que tengas que hacer. Entre las numerosas ventajas que te ofrece, la principal con la que te vas a encontrar es la facilidad de coger tu código dentro de unos cuantos meses, ver por dónde lo dejaste y hacerlo crecer sin complicarte la vida. Como cualquier otro patrón de diseño, únicamente es útil si sigues el estilo que debes usar.
CodeIgniter
Hay numerosos Frameworks MVC en el mercado, yo he elegido CodeIgniter por su rapidez, su licencia y, sobre todo, la facilidad de aprender con él, su documentación es simplemente genial.
A parte del núcleo MVC, CodeIgniter viene con muchísimos módulos que nos ayudarán a no tener que reescribir los fragmentos de código más comunes. Hay bibliotecas que permiten, desde manejar la base de datos mediante ActiveRecord, hasta generar thumbnails de las imágenes que suben tus usuarios (también hay bibliotecas para controlar la subida de ficheros al servidor).
Es fácilmente ampliable, el Framework en sí está predispuesto a que crees tus propias bibliotecas para reutilizarlas en tus futuros proyectos. Como puedes ver, la idea final es escribir menos código, en la medida de lo posible.
Instalación
Requisitos previos:
· Servidor web con PHP 4.3.2 o superior (aunque en este tutorial y los futuros usaré PHP 5)
· Si vas a usar una base de datos, también te va a hacer falta que esté funcionando
· Necesitarás algún programa para descomprimir el paquete de CodeIgniter (zip)
· Editor de textos, un IDE de programación o lo que uses para programar en PHP (yo uso TextMate, para Mac)
Instalación:
1.- Descarga la última versión de CodeIgniter.
2.- Descomprime el fichero en el directorio del servidor web que quieras crear tu aplicación.
3.- Renombra el directorio al nombre de tu proyecto ( yo voy a poner "holamundo" )
4.- En este momento ya puedes acceder a tu aplicación desde el navegador, verás algo así:
5.- Edita el fichero system/application/config/config.php y edita la variable
$config['base_url']
[/b]
Ahí deberás escribir la ruta al raíz de tu aplicación, en mi caso sería http://localhost/holamundo/
Eso será suficiente para seguir este tutorial =)
Controladores
Todo los cálculos que tiene que hacer tu aplicación, los procesan los controladores. En CodeIgniter, las URL de CodeIgniter funcionan así:
http://localhost/holamundo/index.php/[controlador]/[método]/[parametro1]/[parametro2]/...
Por poner un ejemplo:
http://localhost/holamundo/index.php/usuario/mostrar/1/
Estaríamos llamando al controlador usuario, usando el método mostrar y pasándole 1 al primer parámetro que recibe. El código para este controlador sería el siguiente:
<?php if (! defined('BASEPATH')) exit('No direct script access');
class Usuario extends Controller {
function __construct() {
parent::Controller();
}
function mostrar($id = null) {
// Código de este método
echo $id;
}
}
Tendríamos que guardar este fichero en system/application/controllers/usuario.php.
Vistas
En lugar de mezclar la parte del diseño con la lógica del programa (con todos los problemas que te puede ocasionar esto), creamos plantillas a las que le pasamos los datos ya procesados. Vamos a crear la plantilla para nuestro ejemplo:
<html>
<head>
<title>Mostrando al usuario <?= $id ?></title>
</head>
<body>
<h1><?= $id ?></h1>
</body>
</html>
Guardaríamos este fichero en system/application/views/usuario_mostrar.php (le podemos dar el nombre que queramos. Ahora en el controlador (controllers/usuario.php) vamos a llamar a esta vista, así que lo editamos, voy a pegar la porción del código:
function mostrar($id = null) {
$data['id'] = $id;
$this->load->view('usuario_mostrar', $data);
}
Como puedes ver, basta con preparar un array con los datos y pasárselos a la vista, usando la función que proporciona CodeIgniter.
Todo esto tiene como consecuencia que será muchísimo más sencillo en un equipo de trabajadores que uno se encargue del diseño, sin destrozar la lógica de la aplicación y viceversa.
Truco: ¿Por qué no pruebas a hacer un par de vistas cabecera.php y pie.php, podrás llamarlas así, por ejemplo:
$this->load->view('cabecera');
$this->load->view('usuario_mostrar', $data);
$this->load->view('pie');
Modelos
Ya tenemos el controlador y la vista, todo esto está muy bien en páginas estáticas, pero vamos a trastear un poco con los modelos, en este caso vamos a seguir con los usuarios... manos a la obra, crea el fichero system/application/models/usuario_model.php con este código:
<?php if (! defined('BASEPATH')) exit('No direct script access');
class Usuario_model extends Model {
function __construct() {
parent::Model();
$id = null;
$nombre = null;
$apellidos = null;
$email = null;
}
}
Vamos a modificar también un poco el controlador:
function mostrar($id = null) {
// Cargamos el modelo
$this->load->model('usuario_model');
// ... y creamos una nueva instancia
$u = new $this->usuario_model;
// Le asignamos unos cuantos atributos
$u->id = $id;
$u->nombre = 'Pepito';
$u->apellidos = 'de Los Palotes';
// Y se lo pasamos directamente a la vista
$this->load->view('usuario_mostrar', $u);
}
¿Qué más cosas puedo hacer?
Teniendo estos conceptos básicos claros, puedes profundizar en cosas algo más avanzadas como:
· Eliminar el index.php de todas tus URLs
· Crear bucles dentro de tus vistas, por ejemplo, mostrar 5 usuarios en una tabla
· Guardar las instancias de tus modelos en la base de datos
· Hacer un modelo "ListaUsuarios" que te saque un listado de usuarios de la base de datos
· Añadirle métodos a los modelos
· Etc
Pero todas estas cosillas las iré subiendo a parte, lo que me interesa con este tutorial es que conozcas lo más básico del patrón MVC.
Bibliografía y contacto
· Wikipedia
· CodeIgniter.com ( User Guide )
· ReWork, 37signals
· #mv.nerd @ Quakenet y #mvnerds @ Twitter