Clase Libros_Controller
Sucede lo mismo que con los modelos, ahora los controladores son Clases y las acciones son los métodos. La única diferencia con respecto al ejemplo anterior es el uso de la clase View para asignar variables y presentar la plantilla.
La almacenamos en la carpeta **Controllers** y la llamaremos **libros_controller.php** (controllers/libros_controller.php). El contenido de dicha clase será:
<?php
class Libros_Controller
{
function __construct()
{
//Creamos una instancia de nuestro mini motor de plantillas
$this->view = new View();
}
public function listar()
{
//Incluye el modelo que corresponde
require 'models/Libros_Model.php';
//Creamos una instancia de nuestro "modelo"
$Libros_model = new Libros_Model();
//Le pedimos al modelo todos los libros
$libros = $Libros_model->getLibros();
//Pasamos a la vista toda la información que se desea representar
$variables = array();
$variables['libros'] = $libros;
//Finalmente presentamos nuestra plantilla
$this->view->show("libros_listar.php", $variables);
}
public function ver ()
{
if ( !isset ( $_GET [ 'id' ] ) )
die("No has especificado un identificador de libro.");
$id = $_GET [ 'id' ];
//Incluimos el modelo correspondiente
require 'models/Libros_Model.php';
//Creamos una instancia de nuestro "modelo"
$Libros_model = new Libros_Model();
//Le pide al modelo el libro con id = $id
$libro = $libros = $Libros_model->getLibro($id);
if ($libro === null)
die("Identificador de libro incorrecto");
//Pasamos a la vista toda la información que se desea representar
$variables = array();
$variables['libro'] = $libro;
//Pasamos a la vista toda la información que se desea representar
$this->view->show('libros_ver.php', $variables);
}
}
?>
Las dos vistas: libros_listar.php y libros_ver.php no cambian:
<html>
<head>
<title>LIBRERIA UAZON</title>
</head>
<body>
<h1>Libros dados de alta en nuestra libreria</h1>
<table border="1">
<tr>
<th>TITULO</th>
<th>PRECIO</th>
</tr>
<?php foreach ($libros as $libro): ?>
<tr>
<td><?php echo $libro['titulo']?></td>
<td><?php echo number_format($libro['precio'],2)?></td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
<html>
<head>
<title>LIBRERIA UAZON</title>
</head>
<body>
<h1>Ver datos de un libro</h1>
<table border="1">
<tr>
<th>TITULO</th>
<th>PRECIO</th>
</tr>
<tr>
<td><?php echo $libro['titulo'] ?></td>
<td><?php echo number_format($libro['precio'],2)?></td>
</tr>
</table>
</body>
</html>