将变量从控制器传递到CodeIgniter中的视图


Passing variable from controller to view in CodeIgniter

我是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"