Clase View

Vamos a crear una pequeña clase que haga de motor de plantillas, aunque con pocas funcionalidades. Solo nos permite incluir una plantilla y asignarle variables.

La almacenamos en la carpeta **core** y la llamaremos **View.php** (core/View.php). El contenido de dicha clase será:

<?php
class View
{
   public function show($name, $vars = array())
   {
      //$name - nombre de nuestra plantilla, por ej, listar.php
      //$vars - contenedor de variables,
      //   es un array del tipo clave => valor (opcional).

      //Cogemos una instancia de nuestra clase de configuracion.
      $config = Config::getInstance();

      //Creamos la ruta real a la plantilla
      $path = $config->get('VIEWS_FOLDER') . $name;

      //Si no existe el fichero en cuestion, lanzamos una excepción
      if (file_exists($path) == false)
          throw new Exception ('La plantilla ' . $path . ' no existe');

      //Si hay variables para asignar, las pasamos una a una.
      if(is_array($vars))
      {
          foreach ($vars as $key => $value)
          {
              $$key = $value;
          }
      }

      //Finalmente, incluimos la plantilla.
      include($path);
   }
}
/*
El uso es bastante sencillo:
$vista = new View();
$vista->show('listar.php', array("nombre" => "Juan"));
*/

¿Qué hace esta instrucción $$key = $value?

En PHP existen un tipo de variables llamadas **variables variables**. A veces es conveniente tener nombres de variables que se pueden definir y usar dinámicamente, como por ejmplo para un motor de plantillas. Una variable normal se establece con una sentencia como:

<?php
$a = 'titulo';
?>

Una _variable variable_ toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, titulo, se puede usar como el nombre de una variable utilizando dos signos de dólar. Es decir:

<?php
$$a = 'Frankenstein';
?>

En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP:

  • $a que contiene "titulo"

  • $titulo que contiene "Frankenstein"

<?php
$a = 'titulo';
$$a = 'Frankenstein';

echo "$a - $titulo"; //Titulo - Frankenstein
?>

Más información en el manual de PHP accediendo a este enlace: http://php.net/manual/es/language.variables.variable.php

results matching ""

    No results matching ""