MVC son las siglas del patrón de arquitectura Modelo Vista Controlador (model view controller en inglés) que se encarga de separar los datos en una aplicación.
Podemos ver fácilmente MVC en el diseño de una página web. Por un lado tenemos el resultado final, el HTML, en esta caso la vista, por otro lado tenemos un montón de información guardada en nuestra base de datos, toda la interacción con ella será procesada por el modelo y la toma de decisiones, por ejemplo mostrar distintos contenidos para diferentes niveles de usuarios, estará a cargo del controlador
- Modelo: El modelo se encarga del acceso a la información, independientemente de donde y como este guardada, éste será el encargado de retornar, en un formato especifico, la información que estén solicitando. Los datos o información en principio no tendrían importancia para nuestro controlador y vista, el modelo extraerá lo necesario ya sea de un archivo de texto, una base de datos, un xml o de algún otro medio
- Vista: La vista tiene como objetivo visualizar todo lo previamente procesado. Suponiendo que estamos desarrollando el juego del ta-te-ti, por lo general un jugador juega con la “X” y el otro con la “O”, nuestra vista puede mostrar esto o “X” e “Y” o “W” y “Z” para cada jugador, también cada jugador podría tener una imagen asignada. Estos cambios serán fácil implementando MVC ya que la lógica del juego estará en otras capas de la aplicación
- Controlador: El controlador será el encargado de tomar decisiones. Cualquier tipo de camino que se siga el flujo del sistema será por que el controlador desviará éste flujo según la decisión que tome. Continuando con el ta-te-ti el controlador dará turno al siguiente jugador o dirá cuando el juego esta terminado
Bueno, empecemos con el ejemplo en código.
Aquí mostraré 4 archivos, la versión completa pueden descargarla aquí
Aquí el index.php, básicamente este se encarga de juntar todas las partes, recibe dos parámetro por GET, uno es el controlador y el otro la acción (el método) que debe ejecutar.
Luego de algunas validaciones simples instancia el controlador y ejecuta la acción.
<?php //index.php define('CARPETACONTROLADORES', "controladores/"); define('CARPETAMODELOS', "modelos/"); define('CARPETAVISTAS', "vistas/"); if(!empty($_GET['controlador'])){ $controlador = $_GET['controlador']; $file = CARPETACONTROLADORES . $controlador . ".php"; if(is_file($file)){ require_once $file; $objecto = new $controlador; } else{ die('El controlador no existe'); } }else{ die('No ha definido un controlador'); } if(!empty($_GET['accion'])){ $accion = $_GET['accion']; if(!method_exists($controlador, $accion)){ die('El metodo '.$accion.' no existe en el controlador ' . $controlador); } }else{ die('No ha definido una accion'); } $objecto->$accion(); ?>
Controlador
<?php //usuarios.php require_once CARPETACONTROLADORES . "controlador.php"; class usuarios extends controlador { function __construct(){ require_once CARPETAMODELOS . "modeloUsuarios.php"; $this->modelo = new modeloUsuarios; } function listar(){ $usuarios = $this->modelo->listar(); require_once CARPETAVISTAS . "usuariosListar.php"; } } ?>
Modelo
<?php //modeloUsuarios.php require_once CARPETAMODELOS . "modelo.php"; class modeloUsuarios extends modelo{ function __construct(){ parent::__construct(); } function listar(){ $query = "SELECT nombre, apellido FROM usuarios"; $result = $this->mysqli->query($query); return $result; } } ?>
Por sí no vieron el link más arriba ![]()
Descarguen el ejemplo funcionando desde aquí