jairogarcíarincón
Una práctica bastante habitual en los desarrollos orientados a objetos es el uso de clases de ayuda o helpers, que consisten en encapsular los métodos que vamos a utilizar en diferentes clases en una o varias clases de ayuda.
Por ejemplo, si sabemos que nuestro proyecto de coches va a crecer, podría ser interesante crear una clase de ayuda para gestionar las vistas y lo que en un futuro ocurriera dentro de ellas.
Para conseguirlo seguiríamos los siguientes pasos:
- Crear el directorio helper y dentro de el la clase VistasHelper.
- Añadir dentro un método llamado vista que recoja tanto el archivo de la vista como los datos que tenga que recibir dicha vista.
- Modificar la clase CocheController para que use dicho VistasHelper y además llame a las vistas a partir de su método vista().
- Modificar los archivos de vistas para adaptar los datos de entrada a un nombre de variable genérico que valga para todas ellas
- Modificar la variable $home del archivo raíz index.php para adaptarla a nuestro ejemplo.
La estructura de directorios y archivos sería la siguiente:
Estructura de directorios y archivos con helper
El archivo helper/VistasHelper.php:
<?php
namespace App\Helper;
class VistasHelper
{
public function vista($vista,$datos){
$archivo = "view/$vista.php";
require($archivo);
}
}
El archivo controller/CocheController.php:
<?php
namespace App\Controller;
use App\Model\Coche;
use App\Helper\VistasHelper;
class CocheController
{
var $coches;
var $vistas;
function __construct()
{
$this->coches = [
1 => new Coche("Wolkswagen","Polo","negro","Rebeca"),
2 => new Coche("Toyota","Corolla","verde","Marcos"),
3 => new Coche("Skoda","Octavia","gris","Mario"),
4 => new Coche("Kia","Niro","azul","Jairo")
];
$this->vistas = new VistasHelper();
}
public function index(){
//Asigno los coches a una variable que estará esperando la vista
$rowset = $this->coches;
//Le paso los datos a la vista
$this->vistas->vista("index",$rowset);
}
public function ver($id){
if (array_key_exists($id,$this->coches)){
//Si el elemento está en el array, lo muestro
$row = $this->coches[$id];
$this->vistas->vista("ver",$row);
}
else{
//Llamo al método por defecto del controlador
$this->index();
}
}
}
El archivo view/index.php:
<style>
th{
width: 8rem;
text-align: left;
border-bottom: 1px solid black;
}
td{
width: 8rem;
}
</style>
<h1>Ejemplo 9: Listado de coches</h1>
<table>
<tr>
<th>Marca</th>
<th>Modelo</th>
<th>Color</th>
<th>Propietario</th>
</tr>
<?php foreach ($datos as $row): ?>
<tr>
<td><?php echo $row->marca ?></td>
<td><?php echo $row->modelo ?></td>
<td><?php echo $row->color ?></td>
<d><?php echo $row->propietario ?></td>
</tr>
<?php endforeach; ?>
</table>
El archivo view/ver.php:
<style>
th{
width: 8rem;
text-align: left;
border-bottom: 1px solid black;
}
td{
width: 8rem;
}
</style>
<h1>Ejemplo 9: Vista de coche</h1>
<table>
<tr>
<th>Marca</th>
<th>Modelo</th>
<th>Color</th>
<th>Propietario</th>
</tr>
<tr>
<td><?php echo $datos->marca ?></td>
<td><?php echo $datos->modelo ?></td>
<td><?php echo $datos->color ?></td>
<d><?php echo $datos->propietario ?></td>
</tr>
</table>
Ejercicio propuesto 9
- Modifica el Ejercicio 8 de forma que incluya un helper para las vistas.
Publicado el 03 de Diciembre de 2024