Está en la página 1de 32

Noveno Congreso Nacional de Software Libre

Aplicación del patrón arquitectónico Modelo Vista


Controlador en programación con PHP

M V

Gabriel Carrillo
C

San Fernando de Apure, Venezuela 2013


El patrón arquitectónico Modelo Vista Controlador

Introducción

Esta investigación tiene el propósito de presentar una


metodología para el desarrollo de aplicaciones Web en
lenguaje PHP.

La metodología propuesta se basa en programación


orientada a objeto y en el patrón arquitectónico Modelo Vista
Controlador (MVC)

La aplicación sistemática del patrón MVC facilita el desarrollo


de software de calidad, entendido como aquel que tiene
atributos de usabilidad, confiabilidad, robustez y
funcionalidad.

Gabriel Carrillo - Venezuela 2013


El patrón arquitectónico Modelo Vista Controlador

El patrón arquitectónico Modelo Vista Controlador


(MVC) se utiliza para producir software reusable y
¿Qué es? flexible.

El patrón MVC separa la lógica, datos y presentación


en programas de aplicación.

¿ Para qué ? La aplicación del MVC ayuda a mejorar la calidad del


software.

Facilita la organización de equipos de personas para


desarrollar aplicar sistemas de software.

Gabriel Carrillo - Venezuela 2013


El patrón arquitectónico Modelo Vista Controlador

Tecnología Web

Navegador Internet Servidor Web

Petición Apache

PHP, JSP MySQL

PostgreSQL
Mozilla Firefox Respuesta

CLIENTE SERVIDOR

Gabriel Carrillo - Venezuela 2013


El patrón arquitectónico Modelo Vista Controlador

¿ Cómo? El patrón Modelo Vista Controlador propone separar las


funciones de un programa en tres grupos.

Gabriel Carrillo - Venezuela 2013


El patrón arquitectónico Modelo Vista Controlador

La separación de la lógica, datos y presentación significa que los códigos


encargados de realizar esas funciones están en archivos físicos
separados.

Se encarga de controlar la lógica principal de


Controlador la aplicación. Controla el flujo de la ejecución
del código.

Se encarga definir la lógica del negocio.


Modelo Incluye código para manipular (insertar,
modificar, eliminar, leer) datos de tablas.

Vista Se encarga de producir la salida. Se utiliza


básicamente código HTML y hojas de estilo.

Gabriel Carrillo - Venezuela 2013


Estructura de los directorios

Directorio de la aplicación

Respaldo de base de datos

Clases

Controladores

Hojas de estilo

Archivos a incluir: imágenes, textos.

Bibliotecas de terceros (pdf, etc).

Modelos

Vistas

Punto de entrada a la aplicación

Gabriel Carrillo - Venezuela 2013


El Patrón Arquitectónico Modelo Vista Controlador

Para efectos prácticos, el controlador tiene dos partes: Un controlador frontal y el


controlador propio de la acción o módulo que se desea ejecutar. En esta metodología,
el controlador frontal está en el archivo index.php

Gabriel Carrillo - Venezuela 2013


Flujo de control

El flujo de control en una aplicación se realiza de acuerdo con los pasos siguientes:

1. Un usuario envía una petición al


controlador frontal (index.php).

2. El controlador frontal selecciona el


controlador y acción de la
solicitud.

Gabriel Carrillo - Venezuela 2013


Flujo de control

El flujo de control en una aplicación se realiza de acuerdo con los pasos siguientes:

3. El controlador solicita datos al


modelo.
4. El modelo devuelve los
resultados al controlador.

5. El controlador pasa los datos a


la vista. El navegador
presenta la respuesta al
usuario.

Gabriel Carrillo - Venezuela 2013


El controlador frontal

<?php
/**
* Archivo : index.php
*/
Archivo index.php // Leer controlador. Si no hay controlador definido,
// valor por defecto es Sesion.

if(! empty($_GET['cnt'])) {
$controllerName = $_GET['cnt'];
} else {
$controllerName = "Sesion";
Es el único punto de }
$controllerPath = 'controladores/'. $controllerName . '.php';
entrada a la aplicación
// Leer la accion. Si no hay accion definida, tomar inicio.
if(! empty($_GET['act'])) {
$actionName = $_GET['act'];
} else {
$actionName = "inicio";
}

// Incluir el archivo del controlador


require $controllerPath;

// Crear el objeto y llamar la accion


$controller = new $controllerName;
$controller->$actionName();
?>

Gabriel Carrillo - Venezuela 2013


El Patrón Arquitectónico Modelo Vista Controlador

El flujo de ejecución en el punto de entrada a la aplicación se muestra en la


figura siguiente:

Controlador c1
Acción A1

Controlador c2
Petición Controlador
Acción A2
frontal

Controlador cn
Acción An

Lectura de parámetros:
Controlador, acción

Gabriel Carrillo - Venezuela 2013


El controlador

El controlador es una clase. Está definida dentro de un archivo con extensión PHP.

En el ejemplo de esta presentación, se manejan dos entidades: ciudad y


contacto. Por lo tanto, en el directorios controladores se crean dos
archivos para definir las clases.

class Ciudad { class Contacto {


public function inicio() { public function inicio() {

} }

public function insertar() { public function insertar() {


} }

} }

Ciudad.php Contacto.php
Gabriel Carrillo - Venezuela 2013
El controlador
<?php
La clase Ciudad es un class Ciudad {
controlador, y contiene public function inicio() {
todas las acciones que se require "clases/classVista.php";
pueden ejecutar. require "modelos/modeloCiudad.php";
// conexion a la base de datos
require "inc/dbConnect.php";
Llamada a la clase // LECTURA DE LA TABLA ciudad
modeloCiudad para la $oCiudad = new modeloCiudad($idConn);
lectura de tabla de base $rs = $oCiudad->leerTodo();
de datos
// Transforma el resulta $rs en un arreglo asociativo
$item =array();
while ($rows = mysql_fetch_array($rs))
{
$item[] = $rows;
}
Llamada a la clase Vista // parametros para la vista
para dar salida de datos al $datos["item"] = $item;
navegador $datos["titulo1"] = "LISTA DE CIUDADES ";
session_start();
$datos["userNombre"] = $_SESSION["nombreSesion"];
// Salida de la vista
$oSalida = new Vista("ciudad.php",$datos);
}

Gabriel Carrillo - Venezuela 2013


El modelo

El modelo se encarga de ejecutar las operaciones de manipulación de la


base de datos y lógica del negocio.

Cada modelo se crea mediante una clase, definida con código php en un
archivo con nombre igual a la clase.

<?php
class modeloCiudad {
private $idConn;

function __construct() {
}

function leerTodo() {
}
}

modeloCiudad.php

Gabriel Carrillo - Venezuela 2013


El modelo

<?php
class modeloCiudad {
Ejemplo de una clase. Los private $idConn;
métodos (operaciones
permitidas) de la clase se function __construct($idConn)
definen mediante {
$this->idConn = $idConn;
funciones. }

function leerTodo()
{
$sql = "SELECT * FROM ciudad ORDER BY cd_id ASC";
$resultSet = mysql_query($sql,$this->idConn);
return $resultSet;
}
function obtenerDatos($id)
{
$sql = "SELECT * FROM ciudad
WHERE cd_id = '$id'";
$resultSet = mysql_query($sql,$this->idConn);
return $resultSet;
}

Gabriel Carrillo - Venezuela 2013


El modelo

function contarRegistro($nombre)
{
$sql = "SELECT * FROM contacto WHERE con_nombre = '$nombre' ";
$resultSet = mysql_query($sql,$this->idConn);
return mysql_num_rows($resultSet);
}
function insertar($nombre,$tlf)
{
$conn = $this->idConn;
$sql = "INSERT INTO contacto (con_nombre,con_tlf)
VALUES ('$nombre','$tlf' )";
mysql_query($sql,$conn);
}
function modificar($id,$nombre,$tlf)
{
$conn = $this->idConn;
$sql = "UPDATE contacto SET con_nombre='$nombre',con_tlf='$tlf'
WHERE con_id = '$id' ";
mysql_query($sql,$conn);
}

Gabriel Carrillo - Venezuela 2013


El modelo

function eliminar($id)
{
$conn = $this->idConn;
$sql = "DELETE FROM contacto
WHERE con_id = '$id' ";
mysql_query($sql,$conn);
}

}
?>

Gabriel Carrillo - Venezuela 2013


La vista

La vista es la parte visible del software. La interacción usuario-aplicación se


lleva a cabo mediante vistas.

Ejemplo de
una vista

Gabriel Carrillo - Venezuela 2013


La vista

La vista se crea con código html, hojas de estilo y, opcionalmente, javascript.


Se recomienda separar el contenido de la presentación.

Controlador Parámetros Vista

navegador

Gabriel Carrillo - Venezuela 2013


La vista

<?php
La clase Vista se utiliza /**
* Archivo : classVista.php
para crear un objeto * Funcion : Definicion de la clase Vista
que forma la salida *
*/

class Vista {
public $data=array();

function __construct($template,$data=array()) {

if( is_array($data) ) {
extract($data);
}

$encabezado = "vistas/encabezado.php";
$template = "vistas/".$template;
$pie = "vistas/pie.php";

include($encabezado);
include($template);
include($pie);
}
}

?>

Gabriel Carrillo - Venezuela 2013


La vista

El código siguiente en HTML genera la salida para el objeto ciudad.

<?php
/**
*Archivo : ciudad.php
*Funcion : Listar datos de ciudades.
*/

$ver ="index.php?cnt=Beneficiarios&act=ver&benid=";
$modificar ="index.php?cnt=Contacto&act=modificar&id=";
$eliminar ="index.php?cnt=Contacto&act=eliminar&id=";
?>

<body>

<div id="contenedor">

<div id="encabezado">

<table border=0 align=center>


<tr>
<th> <?php echo "$titulo1 "; ?> </th>
</tr>
</table>

</div>

Gabriel Carrillo - Venezuela 2013


La vista

<div id=datatable>

<table border=0 align=center>


<tr>
<th>No </th> <th>NOMBRE</th> <th colspan=2>ACCI&Oacute;N</th>
</tr>

<?php
foreach($item as $fila) {
?>
<tr>
<td width=25> <?php echo $fila['cd_id'] ?> </td>
<td width=300> <?php echo $fila['cd_nombre'] ?></td>
<td width=30> <a title="Modificar" href=<?php echo $modificar.$fila['cd_id']; ?> >
<img src="inc/img/edit.png" width=15 height=15 border=0></a> </td>
<td width=30> <a title="Eliminar" href=<?php echo $eliminar.$fila['cd_id']; ?> >
<img src="inc/img/delete.gif" width=15 height=15 border=0></a> </td>
</tr>

<?php
}
?>
</table>
</div>

Gabriel Carrillo - Venezuela 2013


La vista

<table border=0 align=center>


<tr>
<td>
<button type="button" OnClick="location='index.php?cnt=Ciudad&act=incluir'">
Nuevo </button>

<button type="button"
OnClick="location='index.php?cnt=Ciudad&act=imprimir'">Imprimir</button>

<button type="button"
OnClick="location='index.php?cnt=Menu&act=inicio'">Regresar</button>

</td>
</tr>
</table>

Gabriel Carrillo - Venezuela 2013


La vista

Para generar una vista, en este ejemplo se usan: un encabezado, un


contenido y un pie de pagina. Por ejemplo, la salida para el objeto ciudad
se realiza con los archivos siguientes:

Encabezado (encabezado.php)

Contenido (ciudad.php)

Pie de página (pie.php)

Gabriel Carrillo - Venezuela 2013


La vista

Vista en en el ejemplo.

Encabezado

Contenido

Pie de página

Gabriel Carrillo - Venezuela 2013


La vista

Encabezado

Contenido

Pie de página

Gabriel Carrillo - Venezuela 2013


La vista

El archivo encabezado.php contiene:

<?php
/**
* ENCABEZADO
*
*Archivo : encabezado.php
*Funcion : Vista del encabezado para la aplicacion.
*/

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> <?php echo "$titulo1"; ?> </title>

<link rel="stylesheet" type="text/css" href="css/estilo.css" />


</head>

Gabriel Carrillo - Venezuela 2013


La vista

El archivo pie.php contiene:

<div id="pie">
<table border=0 >
<tr>
<td width=200> Version: 1 </td>
<td> Usuario : <?php echo $userNombre; ?></td>
</table>
</div>

</div>

</body>
</html>

Gabriel Carrillo - Venezuela 2013


La vista

La presentación de la vista (colores, letras, maquetación) se facilita con


hojas de estilo externas. En este ejemplo, el archivo se llama estilo.css.

/**
estilo.css
Autor: Gabriel Carrillo
*/

/* ------------------------------
GENERAL
-------------------------------*/

html {
background: #5f9ea0;
}

.rojo {
color: red;
}

.verde {
color: green;
}

Gabriel Carrillo - Venezuela 2013


La vista

/* ------------------------------
CONTENEDOR
-------------------------------*/
#contenedor {
font-family: arial;
width:80%;
margin-left:10%;
margin-right:10%;
background: #ffffff;
color: #000000;
}
#encabezado {
height: 120px;
/*background: #104E8B; */
background: url(../inc/img/header1.jpg) ;
}

#encabezado th {
font-size: 18;
color: white;
}

Gabriel Carrillo - Venezuela 2013


Consideraciones generales

En este trabajo se presenta una aplicación del patrón arquitectónico Modelo


Vista Controlador para el desarrollo de sistemas Web en lenguaje PHP.

Esta herramienta permite reutilizar diseño detallado y código, con lo cual


facilita la creación de software de calidad.

Es una metodología ágil que puede ser usada por estudiantes y


profesionales interesados en el desarrollo de software.

Gabriel Carrillo - Venezuela 2013

También podría gustarte