[英]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.