繁体   English   中英

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

[英]How can I pass variables to my views in php

我有一个类,其中包含一种加载视图的方法。 这可以完美工作,并且页面已正确加载! 我遇到的问题是,我似乎无法找出一种将变量传递给方法当前试图加载的视图的方法。 如何将变量传递给页面? 有没有办法可以操纵当前代码来完成这项工作? 还是我朝着完全相反的方向前进?

控制器类别:

<?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)。

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

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

尝试这个:

</h1>My name is Dennis. My age is: <?php echo $data['age']; ?></h1>

最简单的方法是将$ 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

您可以使用与模板不同的方法来提取变量。 如果要在模板中使用普通变量,请确保将它们提取到相同的作用域中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM