Está en la página 1de 6

En este tutorial sobre el uso del MVC en PHP veremos de forma simple y clara

que es el MVC, como funciona y como se implementa en PHP nativo sin


frameworks.

¿Que es el patrón MVC?

El patrón de diseño (de software) MVC se encarga de separar la lógica de negocio


de la interfaz de usuario y es el mas utilizado en aplicaciones web, framework, etc,
ya que facilita la funcionalidad, mantenibilidad, y escalabilidad del sistema, de
forma comoda y sencilla, a la vez que ayuda no mezclar lenguajes de
programación en el mismo código, el conocido “código espagueti”.
MVC divide las aplicaciones en tres niveles de abstracción:
1. Modelo: es la lógica de negocios. Es decir las clases y métodos que se comunican
directamente con la base de datos.
2. Vista: es la encargada de mostrar la información al usuario, con de forma gráfica y
legible.
3. Controlador: el intermediario entre la vista y el modelo, se encarga de controlar las
interacciones del usuario en la vista, pide los datos al modelo y los devuelve de
nuevo a la vista para que esta los muestre al usuario. Es decir las llamadas a
clases y métodos, y los datos recibidos de formularios.

¿Como funciona el MVC?

El funcionamiento básico del patrón MVC, puede resumirse en:


1. El usuario realiza una petición.
2. El controlador captura la petición.
3. Hace la llamada al modelo correspondiente.
4. El modelo sera el encargado de interactuar con la base de datos.
5. El controlador recibe la información y la enviá a la vista.
6. La vista muestra la información.
Esquema muy claro del funcionamiento del MVC en PHP de phpzag.com

¿Como implementar el MVC en PHP?

Para implementar el MVC es imprescindible crear una estructura de ficheros


parecida a esta:

Veamos un ejemplo típico del uso del MVC con PHP. Para comprenderlo seria
ideal que supieras PHP Orientado a objetos y como funciona la extensión MySQLi
# index.php
1 <?php
2 require_once("db/db.php");
3 require_once("controllers/personas_controller.php");
4 ?>

# db.php
1
2 <?php
class Conectar{
3 public static function conexion(){
4 $conexion=new mysqli("localhost", "root", "", "mvc");
5 $conexion->query("SET NAMES 'utf8'");
6 return $conexion;
}
7 }
8 ?>
9
# model/personas_model.php
1 <?php
2 class personas_model{
3 private $db;
private $personas;
4
5 public function __construct(){
6 $this->db=Conectar::conexion();
7 $this->personas=array();
8 }
public function get_personas(){
9 $consulta=$this->db->query("select * from personas;");
10 while($filas=$consulta->fetch_assoc()){
11 $this->personas[]=$filas;
12 }
13 return $this->personas;
}
14 }
15 ?>
16
17
18
# contoller/personas_controller.php
1
<?php
2 //Llamada al modelo
3 require_once("models/personas_model.php");
4 $per=new personas_model();
5 $datos=$per->get_personas();
6
7 //Llamada a la vista
require_once("views/personas_view.phtml");
8 ?>
9
El controlador debe tener siempre esta estructura llamada al modelo y debajo a la
vista, si hubiera mas modelos y vistas se sigue haciendo así con todos.
# view/personas_view.phtml
1
2 <!DOCTYPE html>
3 <html lang="es">
4 <head>
<meta charset="UTF-8" />
5 <title>Personas</title>
6 </head>
7 <body>
8 <?php
9 foreach ($datos as $dato) {
echo $dato["nombre"]."<br/>";
10 }
11 ?>
12 </body>
13 </html>
14
Los ficheros de la vista según el estándar de Zend Framework debemos usar
.phtml, pero se podría sin ningún problema usar la extensión .php
Muchos dicen que es recomendable usar CamelCase en los nombres de los
ficheros y las clases, a efectos prácticos da igual usarlo que no, incluso algunos
frameworks como Codeigniter nos sugieren que usemos nombres como
“wellcome_model” por eso no he utilizado CamelCase. Si puedes y quieres abusa
del CamelCase, porque así lo dicen los estándares.
Esquema del ejemplo:

A partir de aquí ya sabemos se podría implementar un controlador frontal que


cargue un controlador u otro en función de la url, etc, pero eso lo veremos en
próximos capítulos. Mientras tanto puedes aprender mas sobre PHP, el MVC y los
frameworks en mi curso gratuito de introducción a los framworks para PHP.

También podría gustarte