Introducción a MVC con PHP, primera parte
19 de September, 2007
Esta es la primera parte de una serie de artículos introductorios al patrón de diseño MVC. En este artículo en particular podrás encontrar algunos ejemplos básicos en PHP con programación estructurada/funcional.
¿Qué es MVC?
MVC viene de Model, View, Controller, o bien: Modelo, Vista y Controlador. Es un patrón de diseño que empecé a utilizar hace algún tiempo y la verdad es que me dió muy buenos resultados en los sistemas donde lo pude aplicar. La idea básica de éste patrón es separar nuestros sistemas en 3 capas, El Modelo, La Vista y el Controlador.
El Modelo se encarga de todo lo que tiene que ver con la persistencia de datos. Guarda y recupera la información del medio persistente que utilicemos, ya sea una base de datos, ficheros de texto, XML, etc.
La Vista presenta la información obtenida con el modelo de manera que el usuario la pueda visualizar.
El Controlador, dependiendo de la acción solicitada por el usuario, es el que pide al modelo la información necesaria e invoca a la plantilla(de la vista) que corresponda para que la información sea presentada.
Un pequeño ejemplo
- Marcos entra a nuestro sitio mediante la URL www.example.com/items/listar.
- Se carga el Controlador Items para ejecutar la acción de Listar.
- El controlador solicita al modelo que le entregue un arreglo con todos los items que hay almacenados en la base de datos.
- Una vez que posee dicha información le indica a la vista que va a utilizar la plantilla correspondiente al listado de items y le provee el arreglo con todos los usuarios.
- La vista, por su parte, toma el arreglo de items y los muestra uno a uno en la plantilla que le indico el controlador.
- Finalmente Marcos recibe el listado de items; lo observa un instante y decide que quiere agregar un nuevo item por lo que hace click en un enlace que lo lleva a la URL www.example.com/items/agregar.
- Se repite el proceso desde el paso 1 pero con la nueva URL
Vamos al codigo
Para ir de a poco tomaré un ejemplo sencillo similar a los que utilice cuando hable de PHP Data Objects y lo iré separando en capas paso a paso. El ejemplo que voy a utilizar es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | < ?php require 'conexion.php'; $db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd, $usuario, $contrasenia); $consulta = $db->prepare('SELECT * FROM items WHERE id_item = ? OR id_item = ?'); $consulta->execute(array(2, 4)); $items = $consulta->fetchAll(); $db = null; ?> < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>PDO - Jourmoly</title> </head> <body> <table> <tr> <th>ID </th><th>Item </th></tr> < ?php foreach($items as $item) { ?> <tr> <td>< ?php echo $item['id_item']?></td> <td>< ?php echo $item['item']?></td> </tr> < ?php } ?> </table> <a href="index.php">Menú</a> </body> </html> |
Nada del otro mundo, es un simple listado común presentado en una tabla HTML. Separaremos dicho ejemplo, por el momento, en 3 ficheros. Uno corresponderá al modelo, otro a la vista y el tercero será el controlador.
¿Cual es el modelo en este ejemplo?
Como mencione mas arriba, el modelo es el que se ocupa, básicamente, de todo lo que tiene que ver con el acceso a la información. Sin dudarlo, en este ejemplo PDO es quien cumple el papel de Modelo.
modelo.php
1 2 3 4 5 6 | < ?php $db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd, $usuario, $contrasenia); $consulta = $db->prepare('SELECT * FROM items'); $consulta->execute(); $items = $consulta->fetchAll(); ?> |
¿Y cual es la vista?
La vista es quien representa la información para que el usuario la pueda entender, en este caso, el HTML, la tabla y todo lo usado para mostrar la información forma parte de la vista.
vista.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>PDO - Jourmoly</title> </head> <body> <table> <tr> <th>ID </th><th>Item </th></tr> < ?php foreach($items as $item) { ?> <tr> <td>< ?php echo $item['id_item']?></td> <td>< ?php echo $item['item']?></td> </tr> < ?php } ?> </table> </body> </html> |
¿Y el controlador?
El controlador es el que permite que todo funcione.
controlador.php
1 2 3 4 5 6 7 8 9 | < ?php //Se incluye el modelo require 'modelo.php'; //En $items tenemos un arreglo con todos los items gracias al modelo //Ahora la vista recibe dicho arreglo para mostrarlo por pantalla require 'vista.php'; ?> |
Por último, tendremos un fichero mas index.php que lo único que hará es incluir algunas variables de configuración y nuestro controlador. Es decir, para ver el resultado del script entraremos por index.php
Afinando nuestro ejemplo
El ejemplo anterior esta bien para un primer acercamiento, pero cuando trabajamos a diario las cosas no son tan sencillas como en este caso, una sola sección o elemento(items), una sola acción(listar), etc. Lo mas normal es que necesitemos de varios controladores y que cada controlador tenga varias acciones. A su vez, cada controlador puede utilizar uno o mas modelos como así también plantillas. Para lograr todo esto, es necesario que automaticemos un poco el primer ejemplo para que admita, en principio, varios controladores y acciones.
Como primera medida vamos a crear una estructura de ficheros para que que todo quede mas o menos ordenado, sencillo:
controladores/ .....itemsControlador.php modelos/ .....itemsModelo.php vistas/ .....listar.php index.php
Donde listar.php equivale a vista.php de nuestro primer ejemplo. itemsModelo.php equivale a modelo.php con algunos cambios:
itemsModelo.php
1 2 3 4 5 6 7 8 9 10 11 | < ?php global $servidor, $bd, $usuario, $contrasenia; $db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd, $usuario, $contrasenia); function buscarTodosLosItems($db) { $consulta = $db->prepare('SELECT * FROM items'); $consulta->execute(); return $consulta->fetchAll(); } ?> |
e itemsControlador.php equivale a controlador.php también con algunos cambios:
itemsControlador.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | < ?php function listar() { //Incluye el modelo que corresponde require 'modelos/itemsModelo.php'; //Le pide al modelo todos los items $items = buscarTodosLosItems($db); //Pasa a la vista toda la información que se desea representar require 'vistas/listar.php'; } ?> |
Como verán los únicos cambios han sido armar los scripts con funciones, de modo que cada fichero pueda tener mas de una de ellas y puedan ser llamadas en cualquier momento e independientemente.
De ahora en mas, nuestro fichero index.php será quien se encargue de averiguar cual es el controlador y acción que busca el usuario, incluirá los archivos que sean necesarios y ejecutara la acción solicitada. Todos los accesos a nuestro sistema serán por medio de index.php y las URL serán similares a las siguientes:
www.example.com/index.php?controlador=items&accion=listar
www.example.com/index.php?controlador=items&accion=agregar
www.example.com/index.php?controlador=items&accion=eliminar
www.example.com/index.php?controlador=usuarios&accion=listar
Ahora solo nos queda hacer un pequeño script que interprete nuestra URL y llame al controlador y la acción que corresponda.
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | < ?php //Primero algunas variables de configuracion require 'conexion.php'; //La carpeta donde buscaremos los controladores $carpetaControladores = "controladores/"; //Si no se indica un controlador, este es el controlador que se usará $controladorPredefinido = "items"; //Si no se indica una accion, esta accion es la que se usará $accionPredefinida = "listar"; if(! empty($_GET['controlador'])) $controlador = $_GET['controlador']; else $controlador = $controladorPredefinido; if(! empty($_GET['accion'])) $accion = $_GET['accion']; else $accion = $accionPredefinida; //Ya tenemos el controlador y la accion //Formamos el nombre del fichero que contiene nuestro controlador $controlador = $carpetaControladores . $controlador . 'Controlador.php'; //Incluimos el controlador o detenemos todo si no existe if(is_file($controlador)) require_once $controlador; else die('El controlador no existe - 404 not found'); //Llamamos la accion o detenemos todo si no existe if(is_callable($accion)) $accion(); else die('La accion no existe - 404 not found'); ?> |
Y ya lo podemos probar:
index.php?controlador=items&accion=listar
¿Y si ahora quiero insertar items?
Es muy sencillo, solo debemos agregar la accion de agregar a nuestro controlador.
itemsControlador.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function listar() { //Incluye el modelo que corresponde require 'modelos/itemsModelo.php'; //Le pide al modelo todos los items $items = buscarTodosLosItems($db); //Pasa a la vista toda la información que se desea representar require 'vistas/listar.php'; } function agregar() { echo 'Aqui incluiremos nuestro formulario para insertar items'; require 'modelos/itemsModelo.php'; if($_POST) { insertar(); } require 'vistas/agregar.php'; } |
Desde luego que el modelo ahora también debería incluir una función insertar() y debería existir una plantilla agregar.php. Para ver nuestro formulario solo deberiamos ingresar por:
index.php?controlador=items&accion=agregar
No olvides que el action del formulario debe apuntar a www.tusitio.com/index.php?controlador=items&accion=agregar
¿Y si quiero agregar un listado de usuarios?
Para ello, solo debes crear un controlador usuariosControlador.php con una funcion listar() similar a la de itemsControlador, y obviamente, también debes crear las plantillas que creas necesarias o, por que no, reutilizar alguna que ya tengas.
index.php?controlador=usuarios&accion=listar
Notas finales
Y hasta aquí llega esta primera parte. Logramos implementar un script separado en 3 capas y dimos el primer paso con MVC usando programación estructurada/funcional. En el articulo que sigue mostraré esto mismo pero con programación orientada a objetos y algunas funcionalidades extras como aplicar URL amigables a un sistema de este tipo.
Bajar los ejemplos
Si querés retocar un poco el código, practicar, etc… podés bajarte todos los ejemplos desde aqui. Incluye un fichero .sql para que crees la tabla utilizada.
Lectura complementaria
Si mi explicación no te basto, podés leer la explicación de MVC en la wikipedia. Desde luego, Google también sabe algo sobre el tema.
Antencion:
Popularity: 100% [?]
Otros artículos
45 comentarios en “Introducción a MVC con PHP, primera parte”
Deja tu comentario
El blog funciona con Wordpress y Simpla theme

September 19, 2007 a las 2:19 am
De buenas a primeras no coincido con tu forma de aplicarlo, aunque aun hoy nadie sabe exactamente como implementarlo, a mi gusto el mejor es mediante una clase que haga a modo de router para direccionar el controlador, de igual forma, buen articulo para lso que inician en este patron de desarrollo
September 19, 2007 a las 10:17 am
ImZyos, gracias por tu comentario. A decir verdad no aplico mvc a mis sistemas de la forma en la que ejemplifique en este articulo. Y coincido con la clase Router, es justamente lo que utilizo aunque no queria complicar las cosas en este primer articulo y me parecio mas sencillo mostrarlo de forma estructurada, sin clases y con ejemplos simples y faciles de entender por todos, incluso por ese gran porcentaje de programadores que utilizan PHP de manera estructurada.
Saludos!
September 19, 2007 a las 10:54 am
He programado un monton en PHP pero estructuradamente, y este tipo de ejemplos hacen cambiar radicalmente la mentalidad de como utilizar un MVC, para un ejemplo inicial es perfecto, ya que conceptos de que hace y como es, los tengo, ejemplos claros y concisos no. Aqui en mi trabajo programamos mucho en php, y pocos aqui utilizan este tipo de programacion MVC y en lo que he visto en proyectos realizados aqui, es la mejor forma de hacerlo ya que de manera rapida y directa uno com programador puede cambiar cosas que el usuario solicite. Excelente ejemplo. Saludos desde Panamá.
September 19, 2007 a las 11:03 pm
Gracias por tu comentario Arcadio
Voy a ver si en los próximos días escribo la segunda parte del articulo. Este es uno de los que mas tiempo me llevo(aunque no es muy largo) solo por el hecho de que lo lei y re-lei muchas veces para intentar hacerlo lo mas claro posible… intentando que se parezca a ese articulo que yo busque cuando quise aprender a usar MVC sin tener la mas mínima idea de que era.
Saludos, nuevamente, gracias por sus comentarios.
December 1, 2007 a las 1:40 am
yo para llamar las vistas ago esto:
$this->load->view(MiVista); dentro de mi controlador yo utilizo el CodeIgniter para ello, pero me ayudo a entender como funciona todo esto gracias
December 31, 2007 a las 2:53 pm
Y la segunda parte cuando???????
January 3, 2008 a las 4:08 am
Vaya, muchas gracias por el articulo, una forma facil de entender, apenas para empezar, no como otros articulos que son demasiado complejos, pero este apenas es para comenzar como vos decis, ya que se podria ahorrar mucho codigo y la seguridad con algo de POO.
es por eso que sigo esperando la II parte
gracias por el tiempo
January 3, 2008 a las 7:04 am
pvd, kmilo… gracias por sus comentarios.
Tuve/tengo unos meses un poco complicados por el trabajo y ademas llegan las vacaciones, de todos modos ya falta menos para que me ponga al día y le preste un poco mas de atención a mi blog
Saludos y gracias por pasar
February 12, 2008 a las 12:47 pm
Y la segunda parte cuando??????????
Habra segunda parte???
February 12, 2008 a las 1:29 pm
SEGUNDA PARTE???????
February 13, 2008 a las 8:49 am
Será una de las primeras cosas que haga cuando tenga la pc nueva jeje
Saludos
February 25, 2008 a las 11:31 am
Se espera ansiosamente la segunda parte.. saludos
March 1, 2008 a las 5:42 pm
Finalmente llego:
Introducción a MVC con PHP, segunda parte
March 15, 2008 a las 11:47 am
Agradezco tu iluminación con respecto al modelo MVC, ya que estaba algo perdido en webs inglesas, pero este ejemplo para PHP 4 me ha dejado muy claro…
La segunda parte ya la he leído, pero definitivamente este es más simple de digerir
March 15, 2008 a las 1:42 pm
Te agradezco el comentario Dennis
, y si, la segunda parte tiene unas vueltas mas, pero con tiempo, paciencia y jugando un poquito se comprende, te lo aseguro
Saludos
June 20, 2008 a las 4:14 pm
Felicitaciones! muy bueno el artículo, está muy bien explicado el concepto de MVC… justo lo que necesitaba…
GRACIAS!!!!
July 9, 2008 a las 4:22 am
Hola Federico, un saludo desde Cartagena Colombia..
Excelente trabajo te felicito…
Desde hace un tiempo he tendido la necesidad de escribir un artículo similar, pero el tiempo y la ocupación nunca me lo ha permitido, la idea inicial era poder ofrecer otra alternativa de aprendizaje a mis estudiantes de ingeniería, aparte de los libros, de los ejercicios en el laboratorio y las clases de tablero, pero antes de iniciar con la escritura, decidí indagar un poco en google para ver si encontraba sitios especialmente blogs que están muy de moda sobre el patrón de diseño MVC con PHP, que se desprendieran en lo posible de los Framework (ZEND, Kate, Synphonia, Kumbia, etc..), que abstraen totalmente al programador sobre su implementación del MVC permitiéndoles utilizar algo que en realidad no saben para que sirve ni las múltiples ventajas que les ofrece, en mi búsqueda encontré mucho sitios interesantes y bastantes buenos, pero definitivamente mi opinión es que tus artículos I y el II son los mejor que he leído en español en la Web, debido a que cumplen con todas mis expectativas y es justamente lo que yo iba ha realizar, pero gracias a ti ya no tendré que hacerlo, así que tuve una mejor idea y le he pasado este link a todos mis estudiantes para que se ilustren mejor….
Nuevamente Gracias…
July 10, 2008 a las 8:21 pm
Eileen, John Carlos. ¡¡¡muchísimas gracias por sus comentarios!!!
Me alegra mucho saber que mis artículos les sean de utilidad.
Saludos
August 8, 2008 a las 12:46 am
Interesante articulo, llevo un año y medio programando comercialmente y hasta hace 4 meses fue que inicie en el mundo de la POO, y eso me ha llevado tambien a incursionar en el patron MVC, me parece un buen articulo para iniciar, y posteriormente canalizar el MVC hasta la POO
August 29, 2008 a las 11:48 am
10 puntos, clarisima la forma de explicar el tema y con un ejemplo simple y abarcativo, de mucha utilidad para gente que recien se inicia en el mundo de MVC
un saludo
August 30, 2008 a las 10:44 pm
$consulta->execute(array(2, 4));
Exactamente aca que es lo que hace el array… ?
August 31, 2008 a las 12:34 pm
Hola nuklear:
$consulta = $db->prepare(‘SELECT * FROM items WHERE id_item = ? OR id_item = ?’);
$consulta->execute(array(2, 4));
El array contiene los parametros que se deben pegar en la consulta SQL, es decir que la consulta queda asi:
SELECT * FROM items WHERE id_item = 2 OR id_item = 4
Son consultas parametrizadas.
@Jacs, @ivan: gracias por sus comentarios
September 9, 2008 a las 11:36 am
ah ya entendi, despues de darle muchas vueltas jeje.
se podria tener una consulta preparada asi $consulta = $db->prepare(’SELECT * FROM items WHERE id_item = ? OR id_item = ? OR id_item = ?’);
y luego :
$consulta->execute(array(2, 4, 6));
Esto nos daria como respuesta todos los items que tengan por id_item esos tres valores, es asi o estoy diciendo cualquier burrada.
Saludo y gracias por todo.
September 9, 2008 a las 11:40 am
Exacto
September 26, 2008 a las 9:59 am
Muy Interesente el articulo, me sirvio muchisimo ahora a fusionar esto con POO eso es lo mas interesante.. nada que envidiarle a otros lenguajes privativos.. Espero siguas publicando articulos como este…muchas felicidades
January 20, 2009 a las 8:55 am
Hola Federico,
Inequivocamente has realizado la mas clara y concisa explicacion del modelo vista controlador. Te diria que enhorabuena, pero en este caso prefiero darte las gracias porque me ha ayudado mucho a aclararme.
Tu rss me lo apunto sin duda.
Muchas gracias,
Pancho
March 22, 2009 a las 11:49 pm
Pues muy retirado de la fecha de publicacion, peero
muy buen articulo, practico para adaptar a nuestras necesidades, un saludo
April 15, 2009 a las 3:25 pm
[...] Introduccion a MVC con php Primera Parte Introduccion a MVC con php Segunda Parte Como funciona el modelo MVC en Cake PHP [...]
April 28, 2009 a las 3:49 am
Buenas Jourmoly.
He estado leyendo tu artículo con mucha atención, y discrepo en un par de cosas contigo. Según la definición de modelo en la Wiki (que supongamos que sea la correcta) dice:
- Modelo: Esta es la representación específica de la información con la cual el sistema opera. La lógica de datos asegura la integridad de estos y permite todo derivar nuevos datos; por ejemplo, no permitiendo comprar un número de unidades negativo, calculando si hoy es el cumpleaños del usuario o los totales, impuestos o importes en un carrito de la compra.
Esta definición es la de una clase contenedora de datos, digamos una clase “persona”, “coche”, “vehículo”, etc… la cual controla el tipo de datos que contiene y el formato en el cual pueden ser guardados y recuperados de la misma.
Otra cosa sería la clase Controladora que es la que hace de puente con la BD en mysql, sql… o donde quiera que esté para guardar los datos del tipo “persona”, “vehículo”, etc…
La última como bien has explicado es la Vista, que creo que todos coincidimos que es la que recoge los eventos de los usuarios y muestra la información o interface en la cual vamos a operar con los datos.
Como clase Modelo podríamos poner de ejemplo la siguiente (está en java pero para el caso es muy parecido y se entiende perfectamente):
/*Clase que representa a una Persona
*@author Raul Martinez Galan
*/
import java.sql.*;
import java.io.Serializable;
public class Persona implements Serializable {
private String id = new String();
private String NIF = new String();
private String nombre = new String();
private String apellido1 = new String();
private String apellido2 = new String();
private String direccion = new String();
private String poblacion = new String();
private String telefono = new String();
private String movil = new String();
private String email = new String();
private Date fechaBaja;
/**
* Constructor de la clase Persona
* @param id: número identificador de la persona
* @param NIF: NIF de la persona
* @param nombre: nombre de la persona
* @param apellido1: primer apellido de la persona
* @param apellido2: segundo apellido de la persona
* @param direccion: direccion de la persona
* @param poblacion: poblacion de la persona
* @param telefono: telefono de la persona
* @param movil: movil de la persona
* @param email: email de la persona
* @param fechaBaja: fecha de baja del registro
*/
public Persona (String id, String NIF, String nombre, String apellido1,
String apellido2, String direccion, String poblacion,
String telefono, String movil, String email, Date fechaBaja) {
this.setId(id);
this.setNIF(NIF);
this.setNombre(nombre);
this.setApellido1(apellido1);
this.setApellido2(apellido2);
this.setDireccion(direccion);
this.setPoblacion(poblacion);
this.setTelefono(telefono);
this.setMovil(movil);
this.setEmail(email);
this.setFechaBaja(fechaBaja);
}
public Persona (){
}
/**
* Método de lectura del valor del atributo Id de la persona
* @return String con el identificador de la persona
*/
public String getId(){
return id;
}
/**
* Método de escritura del valor del atributo Id de la persona
* @param xId El nuevo identificador que se quiere asignar a la persona
*/
public void setId(String xId) {
this.id = xId;
}
/**
* Método de lectura del valor del atributo NIF de la persona
* @return String con el identificador de la persona
*/
public String getNIF(){
return NIF;
}
/**
* Método de escritura del valor del atributo Id de la persona
* @param xNIF El nuevo NIF que se quiere asignar a la persona
*/
public void setNIF(String xNIF) {
this.NIF = xNIF;
}
/**
* Método de lectura del valor del atributo nombre de la persona
* @return String con el nombre de la persona
*/
public String getNombre(){
return nombre;
}
/**
* Método de escritura del valor del atributo nombre de la persona
* @param xNombre El nuevo nombre que se quiere asignar a la persona
*/
public void setNombre(String xNombre) {
this.nombre = xNombre;
}
/**
* Método de lectura del valor del atributo apellido1 de la persona
* @return String con el primer apellido de la persona
*/
public String getApellido1(){
return apellido1;
}
/**
* Método de escritura del valor del atributo apellido1 de la persona
* @param xApellido1 El nuevo apellido1 que se quiere asignar a la persona
*/
public void setApellido1(String xApellido1) {
this.apellido1 = xApellido1;
}
/**
* Método de lectura del valor del atributo apellido2 de la persona
* @return String con el segundo apellido de la persona
*/
public String getApellido2(){
return apellido2;
}
/**
* Método de escritura del valor del atributo apellido2 de la persona
* @param xApellido2 El nuevo apellido2 que se quiere asignar a la persona
*/
public void setApellido2(String xApellido2) {
this.apellido2 = xApellido2;
}
/**
* Método de lectura del valor del atributo direccion de la persona
* @return String con la direccion de la persona
*/
public String getDireccion(){
return direccion;
}
/**
* Método de escritura del valor del atributo direccion de la persona
* @param xDireccion La nueva direccion que se quiere asignar a la persona
*/
public void setDireccion(String xDireccion) {
this.direccion = xDireccion;
}
/**
* Método de lectura del valor del atributo poblacion de la persona
* @return String con la poblacion de la persona
*/
public String getPoblacion(){
return poblacion;
}
/**
* Método de escritura del valor del atributo poblacion de la persona
* @param xPoblacion La nueva poblacion que se quiere asignar a la persona
*/
public void setPoblacion(String xPoblacion) {
this.poblacion = xPoblacion;
}
/**
* Método de lectura del valor del atributo telefono de la persona
* @return String con el telefono de la persona
*/
public String getTelefono(){
return telefono;
}
/**
* Método de escritura del valor del atributo telefono de la persona
* @param xTelefono El nuevo telefono que se quiere asignar a la persona
*/
public void setTelefono(String xTelefono) {
this.telefono = xTelefono;
}
/**
* Método de lectura del valor del atributo movil de la persona
* @return String con el movil de la persona
*/
public String getMovil(){
return movil;
}
/**
* Método de escritura del valor del atributo movil de la persona
* @param xMovil El nuevo Movil que se quiere asignar a la persona
*/
public void setMovil(String xMovil) {
this.movil = xMovil;
}
/**
* Método de lectura del valor del atributo email de la persona
* @return String con el email de la persona
*/
public String getEmail(){
return email;
}
/**
* Método de escritura del valor del atributo Email de la persona
* @param xEmail El nuevo Email que se quiere asignar a la persona
*/
public void setEmail(String xEmail) {
this.email = xEmail;
}
/**
* Método de lectura del valor del atributo fechBaja de la persona
* @return String con la fecha de baja del registro de la persona
*/
public Date getFechaBaja(){
return fechaBaja;
}
/**
* Método de escritura del valor del atributo fechBaja de la persona
* @param xFechaBaja La nueva Fecha de Baja que se quiere asignar a la persona
*/
public void setFechaBaja(Date xFechaBaja) {
this.fechaBaja = xFechaBaja;
}
public static void main (String[] args){
Persona p = new Persona("E31777777X", "31777777X", "Jose", "Rubio", "Delgado",
"c/ Larga s/n", "Denver", null, "666666666", "a@a.com",null);
System.out.println("Persona con ID: " + p.getId());
System.out.println("Nombre: " + p.getNombre() +" "+ p.getApellido1()+" "+ p.getApellido2());
System.out.println("NIF: " + p.getNIF());
System.out.println("Direccion: " + p.getDireccion());
System.out.println("Poblacion: " + p.getPoblacion());
System.out.println("Telefono: " + p.getTelefono());
System.out.println("Movil: " + p.getMovil());
System.out.println("Email: " + p.getEmail());
System.out.println("Fecha Baja: " + p.fechaBaja);
}
}
Un saludo y enhorabuena por la iniciativa yo estoy ahora mismo en ello también intentando convertir mi modelo php estructurado en uno OO. En la carrera estudié toda la OO y ahora intento aplicarla al mundo real y a php
April 28, 2009 a las 1:23 pm
Hola Jorge, ¿como andas? Agradezco mucho tu aporte =)
Comparto lo de la clase “contenedora” porque de hecho es algo que utilizo, que no se ve en el ejemplo porque apuntaba a quienes recién empiezan y no deseaba marearlos demasiado (y que pierdan las ganas y lo dejen para otro dia que vaya a saber cuando será
)
Y con respecto al Modelo en si, sigo pensando que mas allá de que haya una clase “contenedora” hay otra o la misma (segun como lo implementen) que es la responsable de acceder a la capa de almacenamiento de datos y forma parte del modelo. Esta clase retornará un objeto de tipo Persona en su método (por ejemplo) getPersonaPorId($id);
Por si te sirve como aporte, hoy por hoy estoy empezando con muchas ganas con Zend Framework, y con éste trabajo de manera similar (mirándolo con mucho cariño y amor) a como lo expongo en estos humildes artículos.
Un abrazo y nuevamente gracias por tu aporte.
April 29, 2009 a las 3:44 am
De nada Federico. De todas formas me parecen muy útiles tus post para centrar las ideas sobre el tema. Te aseguro que yo llevo un cacao mental con Zend k ni te digo jejeje. Tanta herencia y tanta cosa hace que me pierda.
Un saludo
May 1, 2009 a las 12:19 am
Gracias por tu aporte, muy ilustrativo!
May 3, 2009 a las 9:15 pm
[...] una aplicacion simple utilizando Modelo Vista Controlador, La guía esta distribuida en dos partes Parte 1 y Parte [...]
May 6, 2009 a las 5:58 pm
hola el documento publicado me parece excelente
May 27, 2009 a las 3:47 pm
amigo, cuando vas a hacer la 2da parte?. esta muy didactico tus ejemplos
June 10, 2009 a las 11:42 pm
Muy bueno, te lo agradezco.
Ire a leer la segunda parte, saludos.
June 16, 2009 a las 5:54 pm
Buenas, me gusto la explicación tan sencilla, felicitaciones. Actualmente estoy en un proyecto que se está trabajando MVC con clases, tengo experiencia en PHP POO, pero la verdad se complica al principio, pero a largo plazo creo que MVC es lo mejor.
Actualmente trabajamos en 2 capas con Smarty.
July 27, 2009 a las 9:01 pm
Notable!!!
muy bueno el tutorial, así que leeré la segunda parte, se agradece el aporte, siga así!.
October 25, 2009 a las 1:47 am
Holas, gracias por la introduccion a MVC en php me sirvio mucho, ya lo utilizo en todas mis paginas
, pero tengo una duda o que me aconsejan?
hay algunas paginas que las llamo o redirecciono de esta forma vistas/bienvenida.php o piensan que es mejor usar index.php?controlador=usuario&accion=bienvenida ???
creo que si uso la primera opcion tendria que redirigir el contenido de los js, los css o img haciendo ../js/ejem.js
pero creo que usando la segunda opcion seria directamente js/ejem.js
no creen? si la segunda opcion es la mas eficiente tendria que hacer una accion por cada link que tenga, en el controlador.
January 5, 2010 a las 2:56 pm
Hola!!!, gracias por el tuto, me parece sencillo y facil de aprender ya que si uno quiere desarrollar su propio framework esta perfecto con este tuto, solo quisiera añadir una observación, me parece que la parte de route sale com que sobrando, a mi parecer, ya que yo he trabajado con el mvc de Joomla que maneja esta estructura y le he quitado el route del modelo y las vistas son mas rapidas y tienen la misma funcion, bueno, esto en mi opinión, de cualquier forma me parece que la estructura que se maneja en este artículo es la mejor, felicitaciones!!!.
January 24, 2010 a las 1:16 pm
Muy interesante, se puede aplicar esta tecnica de una manera muy facil, Felicitaciones, el material es bastante util para los que iniciamos en el tema
February 6, 2010 a las 2:03 am
Muy buen articulo, la verdad me sirvio mucho para entender mejor el partron, muy bien explicado. Gracias master!
March 17, 2010 a las 12:01 pm
Muchas gracias por esta excelente explicacion.
Yo soy principiante en mvc y he entendido bien toda la explicacion.
Pero bueno tengo un problema, hago todos estos paso, configuro la pagina del modelo de acuerdo a mi BD, pero al final no se me muestra nada en la vista.
No se que sucede, quisiera que alguien hisciera el favor de decirme posibles causas.
Trabajo con Xammp 1.7.2 .
Estaria muy agradecido por una respuesta.
Saludos y Gracias …
May 6, 2010 a las 3:38 am
Hola, excelente articulo! Tuve problema para configurar el PDO PHP. Ya que por defecto viene desactivado. Despues de lograr que funcionara, me ha servido de mucho, el articulo. Gracias.
May 21, 2010 a las 6:53 pm
muy buen articulo del MVC y con ejemplo. sigan adelante..