我是Codeigniter和OOP PHP的新手。
控制器:
public function index(){
$this->load->model('main_model');
$planet = $this->main_model->solar();
$this->load->view('main_view', $planet);
}
如果echo $planet
在控制器中,它会做它应该做的事情。如果echo $planet
在视图中,我会得到一个未定义的变量错误。$planet
不是数组。为什么$planet
变量没有传递到视图?
我知道这是一个简单而基本的问题,我很尴尬,因为我不知道自己做错了什么。
编辑:好吧,经过更多的摆弄,我开始工作了。变量只能在格式化为数组时从控制器传递到视图吗?
您必须向视图传递一个数组。CodeIgniter会自动为您提供$planet
。
$data = array('planet' => $planet);
$this->load->view('main_view', $data);
这样,您就可以在视图中使用$planet
。
例如,如果您执行以下操作:
$data = array('foo' => 'Hello', 'bar' => 'world');
$this->load->view('main_view', $data);
$foo
和$bar
将在您的视图中可用。数组中的键值对将自动转换为视图中的变量。
您可以将数组或对象传递到视图。然后,您可以在视图中将数组键作为变量访问。
控制器
阵列
public function index()
{
$this->load->model('main_model');
$planet_data['planet'] = $this->main_model->solar();
$this->load->view('main_view', $planet_data);
}
对象
public function index()
{
$this->load->model('main_model');
$planet_data = new stdClass(); //Creates a new empty object
$planet_data->planet = $this->main_model->solar();
$this->load->view('main_view', $planet_data);
}
来自CodeIgniter的用户手册(deadlink):注意:如果使用对象,类变量将变成数组元素
查看
不管你如何传递数据,它都可以这样显示:
<?php echo $planet; ?>
如果它是一个数组,那么你需要遍历它。或者是一个对象,然后访问它的成员变量。
根据我的经验,使用数组比使用对象更常见。
如果模态包含数组响应:
public function solar() {
$data['earth'] = 'Earth';
$data['venus'] = 'Venus';
return $data;
}
然后你可以像这样查看数据:
public function index(){
$this->load->model('main_model');
$planet = $this->main_model->solar();
$this->load->view('main_view', $planet);
}
但在视图中,您将可以访问这样的数据:
echo $earth;
echo $venus;
如果你不知道想要的响应会来,那么使用这样的代码:
public function index(){
$this->load->model('main_model');
$planet['planet'] = $this->main_model->solar();
$this->load->view('main_view', $planet);
}
在视图文件中,您可以访问这样的数据:
print_r($planet);
如果你不知道什么数据会进入视图,那么只需在视图中使用以下代码:
print_r($this->_ci_cached_vars);
试试看:
public function index(){
$this->load->model('main_model');
$data['planet'] = $this->main_model->solar();
$this->load->view('main_view', $data);
}
根据您的意见,您可以访问"$planet"
。