我正在用MVC基本概念构建一个简单的php MVC
在构建视图类时,我试图构建一个简单的函数,让我将变量从控制器传递给视图
<?php
class View {
protected $data = array();
function __construct() {
//echo 'this is the view';
}
public function assign($variable , $value)
{
$this->data[$variable] = $value;
}
public function render($name, $noInclude = false)
{
extract($this->data);
if ($noInclude == true) {
require 'views/' . $name . '.php';
}
else {
require 'views/header.php';
require 'views/' . $name . '.php';
require 'views/footer.php';
}
}
}
在我的控制器类中,我曾经像这样使用
class Index extends Controller {
function __construct() {
parent::__construct();
}
function index() {
$this->view->assign('title','welcome here codes');
$this->view->render('index/index',true);
}
渲染函数工作正常但是分配函数存在问题,因为当我试图从视图中打印出变量时它什么都没有显示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test Code</title>
</head>
<body>
<? echo $title;?>
some text here
</body>
</html>
我试图将View类中的受保护变量更改为public但它没有影响问题,我仍然无法从控制器中打印出任何变量
答案 0 :(得分:1)
它没有显示任何内容,因为你需要View :: render函数中的视图,所以要访问你应该写的数据
<?php echo $this->data['title']; ?>
为避免这种情况,在渲染函数中,您应该从数据数组中创建变量。我的意思是
foreach($this->data as $key => $value) {
$$key = $value;
}
注意:由于变量范围,上面的代码不能存在于“提取”功能中。