我是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
变量传递给视图?
我知道这是一个简单而基本的问题,我很尴尬,我无法弄清楚我做错了什么。
编辑:好的,经过更多的摆弄,我得到了它的工作。变量只有在格式化为数组时才能从Controller传递到View?答案 0 :(得分:27)
您必须将数组传递给视图。 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
。数组中的键值对会自动转换为视图中的变量。
答案 1 :(得分:12)
您可以将数组或对象传递给视图。然后,您可以在视图中将数组键作为变量访问。
<强>阵列强>
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's user manual:注意:如果您使用对象,则类变量将转换为数组元素。
无论您如何传递数据,都可以显示如下:
<?php echo $planet; ?>
如果它是一个数组,那么你需要迭代它。或者一个对象,然后访问它的成员变量。
根据我的经验,使用数组比使用对象更常见。
答案 2 :(得分:6)
这是如何轻松实现的
public function index() {
$this->load->model('main_model');
$data['planet'] = $this->main_model->solar();
$this->load->view('main_view', $data);
}
现在在您的视图中,您可以通过这种方式访问该值
echo $planet;
答案 3 :(得分:1)
尝试:
public function index(){
$this->load->model('main_model');
$data['planet'] = $this->main_model->solar();
$this->load->view('main_view', $data);
}
并且在您看来,您可以访问“$ planet”。就是这样。如果它有用,则接受答案
答案 4 :(得分:1)
您可以将网址中的变量传递给
function regresion($value) {
$data['value'] = $value;
$this -> load -> view('cms/template', $data);
}
在视图中
<?php print_r($value);?>
答案 5 :(得分:1)
如果模态包含数组响应:
false
然后您要查看的数据如下:
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);
答案 6 :(得分:0)
在视图中,我们传递数组,并且数组的键将自动变为变量,并由codeigniter提供给您,我们不能简单地传递变量以查看是否需要传递数组
下面是您的代码
public function index(){
$this->load->model('main_model');
$planet = $this->main_model->solar(); // <--- Change this line
$this->load->view('main_view', $planet);
}
只需将其更改为
public function index(){
$this->load->model('main_model');
$data['planet']= $this->main_model->solar(); // <--- to this
$this->load->view('main_view', $data);
}
在您看来,您可以像这样简单地访问它
echo $planet;