Hola un gusto saludarlos, la verdad es que no encontré la manera de exponer de forma clara mi problema en el titulo, así que si después de leer el tema alguien tiene una sugerencia para el titulo del mismo no dude en hacerlo, así lo demás encontraran de forma mas fácil el tema.
lo que es pasa es sencillo, pero por mas que he intentado no lo he podido solucionar, quizás es un error de conceptos de mi parte. lo quiero hacer es poder hacer un require(); de mi archivo de Configuración en mi clase view, pero solo incluyéndolo una vez y no como estoy haciendo actualmente y es que por cada método tengo incluyo el archivo, espero haberme echo entender.
Creo que la mejor forma de explicarme es colocar el código:
Directorios:
test
----->config
------------>config.php
----->library
--------->config.php
--------->view.php
Archivo config.php
Código:
<?php
$config = null;
$config = new config();
$RouteAbsolute = null;
$RouteAbsolute = 'http://' . $_SERVER['HTTP_HOST'] . '/test/public/';
$config->set('layoutPath', 'layouts/');
$config->set('viewsPath', 'public/html/');
$config->set('staticRoute', $RouteAbsolute);
$config->set('controllersFolder', 'controllers/');
$config->set('modelsFolder', 'models/');
$config->set('viewsFolder', 'views/');
$config->set('dbhost', 'myserver');
$config->set('dbname', 'mydb');
$config->set('dbuser', 'myuser');
$config->set('dbpass', 'mypass');
?>
Clase Config.php (esta en library):
Código:
<?php
class Config
{
private $vars;
function __construct()
{
$this->vars = array();
}
//Con set vamos guardando nuestras variables.
public function set($name, $value)
{
if(!isset($this->vars[$name]))
{
$this->vars[$name] = $value;
}
}
//Con get('nombre_de_la_variable') recuperamos un valor.
public function get($name)
{
if(isset($this->vars[$name]))
{
return $this->vars[$name];
}
}
}
?>
Clase view.php (esta en library):
Código:
<?php
class View
{
public function show($name, $vars = array())
{
//$name es el nombre de nuestra plantilla, por ej, listado.php
//$vars es el contenedor de nuestras variables, es un arreglo del tipo llave => valor, opcional.
// Para que me funcione tengo que poner el require en cada método como en este caso.
require 'config/config.php';
//Armamos la ruta a la plantilla
$path = $config->get('viewsFolder') . $name;
//Si no existe el fichero en cuestion, tiramos un 404
if (file_exists($path) == false)
{
echo ("la vista " . $path . " no existe.");
return false;
}
//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);
}
// Obtiene la templete o layout
public function getLayout($layout)
{
require 'config/config.php';
$file = $config->get('layoutPath') . $layout . '.html';
$selectLayout = file_get_contents($file);
return $selectLayout;
}
// Obtiene la vista
public function getView($view)
{
require 'config/config.php';
$file = $config->get('viewsPath') . $view . '.html';
$selectView = file_get_contents($file);
return $selectView;
}
// renderiza y retorna los datos dinamicos
public function renderDinamicData($html, $data)
{
foreach ($data as $clave=>$valor) {
$html = str_replace('{'.$clave.'}', $valor, $html);
}
return $html;
}
public function staticsRoute()
{
require 'config/config.php';
$route = $config->get('staticRoute');
return $route;
}
}
?>