21

我是 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变量传递给视图?

我知道这是一个简单而基本的问题,我很尴尬我无法弄清楚我做错了什么。

编辑:好的,经过更多的摆弄,我让它工作了。当变量被格式化为数组时,变量只能从控制器传递到视图吗?

4

4 回答 4

31

您必须将数组传递给视图。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在您的视图中可用。数组中的键值对会自动转换为视图中的变量。

于 2012-09-06T06:59:09.700 回答
13

您可以将数组对象传递给视图。然后,您可以在视图中将数组键作为变量访问。

控制器

大批

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 的用户手册(死链接):注意:如果使用对象,类变量将变成数组元素。

看法

不管你如何传递数据,它都可以这样显示:

<?php echo $planet; ?>

如果它是一个数组,那么您将需要遍历它。或者一个对象,然后访问它的成员变量。


根据我的经验,使用数组比使用对象更常见。

于 2012-09-06T07:42:08.883 回答
1

试试看:

public function index(){
    $this->load->model('main_model');
    $data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $data);    
}

并根据您的意见,您可以访问"$planet".

于 2012-09-06T07:01:46.540 回答
1

如果模态包含数组响应:

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);
于 2017-03-23T03:59:54.823 回答