Saltar al contenido
Codif铆ca.me | Desarrollo web | Programaci贸n

Ejemplo c贸digo Modelo Vista y Controlador | Y Documentaci贸n

27 marzo, 2019
php frameworks

MVC y Documentaci贸n

 

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 鈥渢itulo鈥 del array pasado como par谩metro.

Despu茅s, se recorre cada elemento almacenado en el array llamado 鈥渓ibros鈥 (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

modelo.php
/*
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;
}
vista.php
/*
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;
}
controler.php
/*
* 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);

php frameworks