Я создал свой собственный небольшой фреймворк PHP для удовольствия, однако у меня возникают проблемы с передачей переменных из начальной загрузки в представления ….
если я добавлю echo, print_r, var_dump моей целевой переменной в начальный загрузчик, вывод отобразится в браузере перед тегом … однако целевой var в bootstrap.php недоступен в представлении, он отображается как » «хотя в верхней части страницы выводится правильно ….
Кое-что я заметил из похожих вопросов:
- The target variable is not being over written
- The include target path is correct and the file exists
- The file is only being included one time (include_once is only fired once)
Любые идеи очень ценятся, я дергаю себя за волосы, лол …
Source Code
Если вы просто хотите отобразить название своего сайта, я думаю, вы можете использовать такую константу:
define('SITE_NAME', "Jeff's Site");
А затем отобразите это в вашем index.tpl:
<?php echo SITE_NAME; ?>
Или вы можете отправить свои переменные в представление, немного расширив JLR_Core_Views
:
class JLR_Core_Views
{
private $data;
public function loadView($templatePath, $data = array())
{
$this->data = $data;
$templatePath = JLR_ROOT . '/webroot/' . $templateName . '.tpl';
if(file_exists($templatePath)) {
// Yes, I know about the vuln here, this is just an example;
ob_start();
include_once $templatePath;
return ob_get_clean();
}
}
function __get($name)
{
return (isset($this->data[$name]))
? $this->data[$name]
: null;
}
}
Затем вы можете назвать свой шаблон так:
$view = new JLR_Core_Views();
$view->loadView("index", array("sitename" => "Jeff's Site"));
А вот ваш index.tpl:
<?php echo $this->siteName; ?>
Ниже приведен еще один пример того, что вы можете сделать.
Сначала вы создаете этот класс для хранения всех переменных, которые вы хотите:
<?php
class JLR_Repository {
private static $data = array();
public function set($name, $value) {
self::$data[$name] = $value;
}
public function get($name) {
return (isset(self::$data[$name]))
? self::$data[$name]
: null;
}
}
?>
Затем, когда вы хотите сохранить что-то в нем:
JLR_Repository::set("sitename", "Jeff's Site");
И в вашем index.tpl:
<?php echo JLR_Repository::get("sitename"); ?>
попробуйте использовать ключевое слово global http://php.net/manual/en/language.variables.scope.php