包含引导程序的PHP Vars未显示在视图中

时间:2014-10-18 16:12:25

标签: php apache lamp

我已经创建了自己的小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 

https://gist.github.com/jeffreyroberts/f330ad4a164adda221aa

2 个答案:

答案 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)