gabrielcarrillomvcphp-140606174603-phpapp01
DESCRIPTION
mvc php - excelenteTRANSCRIPT
Aplicación del patrón arquitectónico Modelo Vista Controlador en programación con PHP
Noveno Congreso Nacional de Software Libre
San Fernando de Apure, Venezuela 2013
Gabriel Carrillo
M V
C
Introducción
Esta investigación tiene el propósito de presentar unametodología para el desarrollo de aplicaciones Web enlenguaje PHP.
El patrón arquitectónico Modelo Vista Controlador
Gabriel Carrillo - Venezuela 2013
lenguaje PHP.
La metodología propuesta se basa en programaciónorientada a objeto y en el patrón arquitectónico Modelo VistaControlador (MVC)
La aplicación sistemática del patrón MVC facilita el desarrollode software de calidad, entendido como aquel que tieneatributos de usabilidad, confiabilidad, robustez yfuncionalidad.
El patrón arquitectónico Modelo Vista Controlador (MVC) se utiliza para producir software reusable y flexible. ¿Qué es?
El patrón MVC separa la lógica, datos y presentación en programas de aplicación.
El patrón arquitectónico Modelo Vista Controlador
Gabriel Carrillo - Venezuela 2013
La aplicación del MVC ayuda a mejorar la calidad del software.
¿ Para qué ?
Facilita la organización de equipos de personas para desarrollar aplicar sistemas de software.
en programas de aplicación.
Tecnología Web
El patrón arquitectónico Modelo Vista Controlador
Servidor WebInternetNavegador
Apache
PHP, JSPMySQL
Petición
Gabriel Carrillo - Venezuela 2013
PHP, JSPMySQL
PostgreSQLMozilla Firefox Respuesta
CLIENTE SERVIDOR
¿ Cómo?
El patrón arquitectónico Modelo Vista Controlador
El patrón Modelo Vista Controlador propone separar las
funciones de un programa en tres grupos.
Gabriel Carrillo - Venezuela 2013
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.
ControladorSe encarga de controlar la lógica principal de
la aplicación. Controla el flujo de la ejecución
del código.
El patrón arquitectónico Modelo Vista Controlador
Gabriel Carrillo - Venezuela 2013
ModeloSe encarga definir la lógica del negocio.
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.
Directorio de la aplicación
Estructura de los directorios
Respaldo de base de datos
Clases
Controladores
Hojas de estilo
Gabriel Carrillo - Venezuela 2013
Modelos
Vistas
Hojas de estilo
Archivos a incluir: imágenes, textos.
Bibliotecas de terceros (pdf, etc).
Punto de entrada a la aplicación
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
1. Un usuario envía una petición al
controlador frontal (index.php).
El flujo de control en una aplicación se realiza de acuerdo con los pasos siguientes:
Gabriel Carrillo - Venezuela 2013
2. El controlador frontal selecciona el
controlador y acción de la
solicitud.
Flujo de control
3. El controlador solicita datos al
modelo.
4. El modelo devuelve los
resultados al controlador.
El flujo de control en una aplicación se realiza de acuerdo con los pasos siguientes:
Gabriel Carrillo - Venezuela 2013
resultados al controlador.
5. El controlador pasa los datos a
la vista. El navegador
presenta la respuesta al
usuario.
<?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";
}
$controllerPath = 'controladores/'. $controllerName . '.php';
Archivo index.php
Es el único punto de
entrada a la aplicación
El controlador frontal
Gabriel Carrillo - Venezuela 2013
// 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();
?>
entrada a la aplicación
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:
Petición Controlador
Controlador c1
Acción A1
Controlador c2
Acción A2
Gabriel Carrillo - Venezuela 2013
Petición Controlador
frontalAcción A2
Controlador cn
Acción An
Lectura de parámetros:
Controlador, acción
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 {
Gabriel Carrillo - Venezuela 2013
class Ciudad {
public function inicio() {
}
public function insertar() {
}
}
Ciudad.php
class Contacto {
public function inicio() {
}
public function insertar() {
}
}
Contacto.php
<?php
class Ciudad {
public function inicio() {
require "clases/classVista.php";
require "modelos/modeloCiudad.php";
// conexion a la base de datos
require "inc/dbConnect.php";
// LECTURA DE LA TABLA ciudad
$oCiudad = new modeloCiudad($idConn);
$rs = $oCiudad->leerTodo();
// Transforma el resulta $rs en un arreglo asociativo
El controlador
La clase Ciudad es un
controlador, y contiene
todas las acciones que se
pueden ejecutar.
Llamada a la clase
modeloCiudad para la
lectura de tabla de base
de datos
Gabriel Carrillo - Venezuela 2013
// Transforma el resulta $rs en un arreglo asociativo
$item =array();
while ($rows = mysql_fetch_array($rs))
{
$item[] = $rows;
}
// parametros para la vista
$datos["item"] = $item;
$datos["titulo1"] = "LISTA DE CIUDADES ";
session_start();
$datos["userNombre"] = $_SESSION["nombreSesion"];
// Salida de la vista
$oSalida = new Vista("ciudad.php",$datos);
}
de datos
Llamada a la clase Vista
para dar salida de datos al
navegador
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.
Gabriel Carrillo - Venezuela 2013
<?php
class modeloCiudad {
private $idConn;
function __construct() {
}
function leerTodo() {
}
}
modeloCiudad.php
<?php
class modeloCiudad {
private $idConn;
function __construct($idConn)
{
$this->idConn = $idConn;
}
function leerTodo()
{
El modelo
Ejemplo de una clase. Los
métodos (operaciones
permitidas) de la clase se
definen mediante
funciones.
Gabriel Carrillo - Venezuela 2013
{
$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;
}
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' )";
El modelo
Gabriel Carrillo - Venezuela 2013
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);
}
function eliminar($id)
{
$conn = $this->idConn;
$sql = "DELETE FROM contacto
WHERE con_id = '$id' ";
mysql_query($sql,$conn);
}
}
El modelo
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
Gabriel Carrillo - Venezuela 2013
Ejemplo de
una vista
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 VistaParámetros
Gabriel Carrillo - Venezuela 2013
navegador
La vista
<?php
/**
* Archivo : classVista.php
* Funcion : Definicion de la clase Vista
*
*/
class Vista {
public $data=array();
function __construct($template,$data=array()) {
La clase Vista se utiliza
para crear un objeto
que forma la salida
Gabriel Carrillo - Venezuela 2013
if( is_array($data) ) {
extract($data);
}
$encabezado = "vistas/encabezado.php";
$template = "vistas/".$template;
$pie = "vistas/pie.php";
include($encabezado);
include($template);
include($pie);
}
}
?>
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=";
?>
Gabriel Carrillo - Venezuela 2013
?>
<body>
<div id="contenedor">
<div id="encabezado">
<table border=0 align=center>
<tr>
<th> <?php echo "$titulo1 "; ?> </th>
</tr>
</table>
</div>
La vista
<div id=datatable>
<table border=0 align=center>
<tr>
<th>No </th> <th>NOMBRE</th> <th colspan=2>ACCIÓN</th>
</tr>
<?php
foreach($item as $fila) {
?>
<tr>
<td width=25> <?php echo $fila['cd_id'] ?> </td>
Gabriel Carrillo - Venezuela 2013
<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>
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>
Gabriel Carrillo - Venezuela 2013
</td>
</tr>
</table>
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)
Gabriel Carrillo - Venezuela 2013
Contenido (ciudad.php)
Pie de página (pie.php)
La vista
Vista en en el ejemplo.
Encabezado
Contenido
Gabriel Carrillo - Venezuela 2013
Pie de página
La vista
Encabezado
Contenido
Gabriel Carrillo - Venezuela 2013
Contenido
Pie de página
La vista
El archivo encabezado.php contiene:
<?php
/**
* ENCABEZADO
*
*Archivo : encabezado.php
Gabriel Carrillo - Venezuela 2013
*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>
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>
Gabriel Carrillo - Venezuela 2013
</table>
</div>
</div>
</body>
</html>
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
*/
/* ------------------------------
Gabriel Carrillo - Venezuela 2013
/* ------------------------------
GENERAL
-------------------------------*/
html {
background: #5f9ea0;
}
.rojo {
color: red;
}
.verde {
color: green;
}
La vista
/* ------------------------------
CONTENEDOR
-------------------------------*/
#contenedor {
font-family: arial;
width:80%;
margin-left:10%;
margin-right:10%;
background: #ffffff;
color: #000000;
}
#encabezado {
height: 120px;
/*background: #104E8B; */
Gabriel Carrillo - Venezuela 2013
/*background: #104E8B; */
background: url(../inc/img/header1.jpg) ;
}
#encabezado th {
font-size: 18;
color: white;
}
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
profesionales interesados en el desarrollo de software.