MVC y Documentación
Índice de contenido
Tarea Individual 5
MVC y Documentación
Creación del controlador
Se crea la constante CONTROLADOR con valor true. Esta constante nos permitirá definir lógica en modelo.php y vista.php para evitar que se accedan directamente a ellas (Ver punto 4)
Se incluyen modelo.php y vista.php. Dado que la funcionalidad del controlador es recoger los datos del modelo y pasarlos a la vista para que esta lo pueda representar se incluyen ambos ficheros:
Para implementar la funcionalidad indicada, primero se crea la variable que contendrá los datos:
Esta variable contendrá un título fijado aquí:
Y los datos que devolverá la función recogerDatos del modelo:
Finalmente, se mostrará la información por pantalla. Como de esto se encarga la vista, se llama a la función indicada de la vista con los datos ya cargados:
Y ya estaría completa la lógica del controlador. Faltan por definir, por tanto, las funciones usadas.
Creación del modelo
Se debe crear en este fichero la función que se ha usado en el controlador, recogerDatos. Se encargará de devolver un array con varios libros. (Cada libro contiene título, autor, editorial y año de publicación.
Creación de la vista
La vista se encarga de darle formato a los datos y mostrar la página. Desde el controlador se llama a la funcion mostrarInformacion y se pasan los datos como parámetro por lo que se va a mostrar la página con dicha función:
Lo primero que se muestra es el título dentro del head y una cabecera en h1. Ambos datos se encuentran en el elemento “titulo” del array pasado como parámetro.
Después, se recorre cada elemento almacenado en el array llamado “libros” (dentro del array $datos) y se imprime una fila con el contenido de cada elemento del array en una celda mostrando así la información de cada libro.
Esto sería lo que se mostraría ahora por pantalla si accedemos a index.php:
Asegurar que solamente se muestra el controlador
El controlador es el único fichero al que se debe acceder directamente. En él se definió una constante llamada CONTROLADOR. Gracias a esa constante, cuando se cargue modelo.php o vista.php se comprobará si esa constante está definida:
Este if recubrirá toda la lógica definida hasta el momento tanto en modelo.php como en vista.php. En caso de que la constante esté definida se continuará el uso normal de la página. Sin embargo, si no está definida (else):
Se devolverá una página web con un error y con un mensaje de página no encontrada (404) en la cabecera. Después se matará el proceso php para evitar que continúe con la carga.
Si ahora se accede a modelo.php o vista.php este es el resultado:
Comentar las funciones creadas
La función recogerDatos no tiene parámetros. Por tanto se define su propósito general y el tipo de dato devuelto se explica con un @return
La función mostrarInformacion no devuelve nada. Por tanto se define su propósito general y el parámetro que usa con un @param
Adicionalmente, se ha comentado la constante creada en index.php ya que parece importante que su existencia no caiga en el olvido cuando se vuelva a trabajar con estos ficheros:
Al ya estar todo comentado, se descarga phpDocumentor.phar de la página oficial. Una vez descargado lo ejecutamos con php pasándole como parámetro -d la ruta en la que están los ficheros a documentar y como parámetro -t dónde se generará la documentación:
Accediendo mediante un navegador a la página generada, observamos el resultado tanto para funciones:
como para la constante
ummmm… vale perfecto, dame el código please!!
Aquí tienes el código
/* Comprobar que está definida la constante CONTROLADOR. Si no está definida significará que se ha llamado al fichero sin pasar por el controlador. */ if(defined('CONTROLADOR')){ /* La función recogerDatos() deberá devolver un array con al manos 5 libros. Cada uno de los libros debe tener un Título, un autor, una editorial y un año de publicación. */ /** * Recoge los datos idealmente de base de datos * @return array con libros. Éstos tienen un patrón: título, autor, editorial, año */ function recogerDatos(){ $libros = array( //seguimos el patrón (título, autor, editorial, año) array('Tormenta de nieve y aroma de almendras', 'Camilla Läckberg', 'Maeva', '2016'), array('La revocación', 'Michael Conelly', 'RBA', '2014'), array('El laberinto de los espíritus', 'Carlos Ruíz Zafón', 'Planeta', '2016'), array('Echo Park', 'Michael Conelly', 'Rocabolsillo', '2014'), array('El bazar de los malos sueños', 'Stephen King', 'Plaza & Janes', '2019') ); return $libros; } } else { //En ese caso, mostrar un mensaje de error indicando que no se puede llamar a ese fichero directamente header("Status: 404 Not Found"); echo "<html><body><h1>Esta página no existe en este servidor</h1></body></html>"; //y terminar la ejecución. Para terminar la ejecución, especialmente en la vista, //debéis ejecutar un comando que "mate" el proceso php (die, en inglés) die; } |
/* Comprobar que está definida la constante CONTROLADOR. Si no está definida significará que se ha llamado al fichero sin pasar por el controlador. */ if(defined('CONTROLADOR')){ //Crear la función monstrarDatos($datos = array()) para mostrar la información enviada por el controlador. /** * Muestra por pantalla la información recibida. * Primero muestra el título en la página y como cabecera. * Después imprime en una tabla los libros recibidos * @param $datos Contiene la información a imprimir: título y libros */ function mostrarInformacion($datos){ //El título enviado por el controlador debe aparecer en el título de la página, (head > title) echo '<head><title>'.$datos["titulo"].'</title></head>'; //y como cabecera de la misma (h1) echo '<body><h1>'.$datos["titulo"].'</h1>'; //Los datos aparecerán en una tabla que represente el listado de libros echo '<table border=1>'; foreach ($datos["libros"] as $value): echo '<tr> <td>'.$value[0].'</td> <td>'.$value[1].'</td> <td>'.$value[2].'</td> <td>'.$value[3].'</td> </tr>'; endforeach; echo '</table>'; } } else { //En ese caso, mostrar un mensaje de error indicando que no se puede llamar a ese fichero directamente header("Status: 404 Not Found"); echo "<html><body><h1>Esta página no existe en este servidor</h1></body></html>"; //y terminar la ejecución. Para terminar la ejecución, especialmente en la vista, //debéis ejecutar un comando que "mate" el proceso php (die, en inglés) die; } |
/* * Controlador: llama al modelo para recoger los datos y se los pasa a la vista * para que se pueda representar. Único fichero que podrá ofrecer salida alguna al exterior */ /** * @const boolean|true Indica que este archivo es el contorlador y, por tanto, el único que puede ser llamado desde el exterior */ define ('CONTROLADOR', true); //Crear la variable datos como array. $datos = array(); //Incluir en el fichero, tras la creación de la constante, otros dos ficheros más, modelo.php y vista.php. require_once 'modelo.php'; require 'vista.php'; //Introducir en datos["titulo"] un título para la página $datos["titulo"] = "Tarea 5"; //Llamar a la función recogerDatos(), que se deberá crear en el modelo, y almacenar el resultado en datos['libros']. $datos["libros"] = recogerDatos(); //Llamar a la función mostrarInformación($datos), que se deberá definir en la vista, para representar la información obtenida mostrarInformacion($datos); |