jairogarcíarincón

Introducció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.

VistasHelper

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