Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中将变量传递给视图_Php_Templates_Scope - Fatal编程技术网

如何在php中将变量传递给视图

如何在php中将变量传递给视图,php,templates,scope,Php,Templates,Scope,我有一个类,它包含一个加载视图的方法。这是完美的工作和页面加载正确!我遇到的问题是,我似乎无法找到将变量传递给我的方法当前尝试加载的视图的方法。如何将变量传递到页面?有没有一种方法可以操作我当前的代码来实现这一点?还是我要朝完全相反的方向走 控制器类: <?php class Controller { private $args = array(); public function view($page, $args = null) {

我有一个类,它包含一个加载视图的方法。这是完美的工作和页面加载正确!我遇到的问题是,我似乎无法找到将变量传递给我的方法当前尝试加载的视图的方法。如何将变量传递到页面?有没有一种方法可以操作我当前的代码来实现这一点?还是我要朝完全相反的方向走

控制器类:

<?php
    class Controller {

        private $args = array();

        public function view($page, $args = null) {

            if ($args !== null) {
                $this->args = $args;
                extract($this->args);
            }

            $page = VIEWS . $page . '.php';
            $template = $this->getTemplate($page);

            echo $template;
        }

        private function getTemplate($file) {
            ob_start();
            include($file);
            $template = ob_get_contents();
            ob_end_clean();
            return $template;
        }
    }
    ?>

控制器:

<?php
    class Page extends Controller {

        public function person($age) {
            $data['age'] = $age;
            $this->view('person', $data);
        }

    }
?>

查看内容:

</h1>My name is Dennis. My age is: <?php echo $age; ?></h1>
我叫丹尼斯。我的年龄是:
最终结果是一个未定义的变量($age)。

尝试以下方法:

</h1>My name is Dennis. My age is: <?php echo $data['age']; ?></h1>
我叫丹尼斯。我的年龄是:
试试这个:

</h1>My name is Dennis. My age is: <?php echo $data['age']; ?></h1>
我叫丹尼斯。我的年龄是:

提取变量的方法与包含模板的方法不同。如果要在模板中使用普通变量,请确保在同一范围内提取它们。

提取变量的方法与包含模板的方法不同。如果要在模板中使用普通变量,请确保在相同的范围内提取它们。

view()
中提取的变量在
getTemplate()
中不可用。这是一个不同的范围。相反,应该使用与渲染相同的方法提取它们


另外,这里没有MVC视图。这只是一个小问题。MVC中的视图是负责UI逻辑的实例。它应该从模型层请求所需的信息,然后,如果响应不是简单的HTTP位置头,则使用多个模板创建HTML。

view()
中提取的变量在
getTemplate()
中不可用。这是一个不同的范围。相反,应该使用与渲染相同的方法提取它们


另外,这里没有MVC视图。这只是一个小问题。MVC中的视图是负责UI逻辑的实例。它应该从模型层请求所需的信息,然后,如果响应不是简单的HTTP位置头,则使用多个模板创建HTML。

最简单的方法是将$args变量传递给getTemplate,并在getTemplate方法中执行extract方法

private function getTemplate($file, $args = null) {
    if ($args !== null) {
        extract($args);
    }
    ob_start();
    include($file);
    $template = ob_get_contents();
    ob_end_clean();
    return $template;
}
当包含并捕获输出时,将执行该php文件,因此在包含之前,必须显示所有变量


如果不想传递变量,可以在模板内部使用$this->args

最简单的方法是将$args变量传递给getTemplate,并在getTemplate方法中执行extract方法

private function getTemplate($file, $args = null) {
    if ($args !== null) {
        extract($args);
    }
    ob_start();
    include($file);
    $template = ob_get_contents();
    ob_end_clean();
    return $template;
}
当包含并捕获输出时,将执行该php文件,因此在包含之前,必须显示所有变量


如果不想传递变量,可以在模板内部使用$this->args

@JosephSilber构建自定义框架。更多学习内容。@JosephSilber构建自定义框架。更多信息供学习。该范围内没有变量$data该范围内没有变量$data太棒了!工作起来很有魅力。感谢您提供有关视图与模板的信息!我将仔细阅读。调用
提取
甚至没有必要,因为数据已经在
$this->args
@Jack中可用,我实际上建议不要这样做。它会添加“必须从对象内部呈现”作为隐藏要求。这是有道理的,尽管“必须使用这些全局变量进行呈现在我看来同样糟糕”:@Jack,嗯。。模板使用的变量不是全局变量。唯一的要求是它们存在于所述模板呈现的范围内。太棒了!工作起来很有魅力。感谢您提供有关视图与模板的信息!我将仔细阅读。调用
提取
甚至没有必要,因为数据已经在
$this->args
@Jack中可用,我实际上建议不要这样做。它会添加“必须从对象内部呈现”作为隐藏要求。这是有道理的,尽管“必须使用这些全局变量进行呈现在我看来同样糟糕”:@Jack,嗯。。模板使用的变量不是全局变量。唯一的要求是它们存在于呈现所述模板的范围内。