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 18 de Junio de 2025