我已经创建了自己的小PHP框架,但是,我无法将变量从bootstrap传递给视图....
如果我在引导程序中放入一个echo,print_r,var_dump我的目标变量,那么输出会在标记之前显示在浏览器中......但是bootstrap.php中的目标var在视图中不可用,它即将到来即使在页面顶部正确输出......“
我从类似问题中注意到的事情:
- 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
答案 0 :(得分:1)
如果您只是想显示您的网站名称,我认为您可以使用这样的常量:
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"); ?>
答案 1 :(得分:0)
尝试使用'global'关键字 - http://php.net/manual/en/language.variables.scope.php