Hola chicos,
Estoy utilizando mi propio framework, me gustaria saber una buena manera de pasarle los datos a la vista.
Yo la que habia pensado es la siguiente manera:
La vista extiende de la clase Registry
Código PHP:
<?php
Class Registry {
private $vars = array();
function __set($key, $var) {
$this->vars[$key] = $var;
return true;
}
function __get($key) {
if (isset($this->vars[$key]) == false) {
return null;
}
return $this->vars[$key];
}
function __unset($var) {
unset($this->vars[$key]);
}
?>
La vista extenderia esta clase con lo que heredaria la propiedad array vars y los metodos magicos, asi cuando desde el controlador hacemos $vista->titulo = "inicio"
Gracias al metodo magico __set se guarda en la propiedad $_vars de la clase vista como $_vars['titulo'] = 'inicio'
Entonces en mi vista antes de hacer un include de la plantilla con los tipicos <?php if isset($titulo) echo $titulo; ?>
Lo que hago es cargar todas las variables como variables locales de la manera siguiente
Código PHP:
foreach ($this->_vars as $key => $value)
{
$$key = $value;
}
Busco como solucionar algun pequeño problema que he tenido o busco alguna otra forma de hacer el paso de datos de los controladores a la vista.
El problema que he tenido es cuando intento hacer $vista->layout['url_inicio'] = "url/ejemplo" que me tira un error evidente. Lo he solucionado con $layout[url_inicio'] = "url/ejemplo" y luego $vista->layout = $layout;
Y si quieres añadir un nuevo valor, tendrias que hacer algo asi quizas ( no lo he probado ) y parece feo.
$layout = $vista->layout; // Recuperamos el vector
$layout['url_contacto'] = 'url/contacto'; // Añadimos
$vista->layout = $layout; // Volvemos a guardar
¿ Que me decis chicos ?