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

use*_*244 16 php oop codeigniter

我是Codeigniter和OOP PHP的新手.

控制器:

public function index(){
    $this->load->model('main_model');
    $planet = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
    }
Run Code Online (Sandbox Code Playgroud)

如果echo $planet在控制器中它执行它应该做的事情.如果我echo $planet在视图中得到一个未定义的变量错误. $planet不是数组.为什么不将$planet变量传递给视图?

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

编辑:好的,经过更多的摆弄,我得到了它的工作.变量只有在格式化为数组时才能从Controller传递到View?

Mis*_*cha 27

您必须将数组传递给视图.CodeIgniter会自动$planet提供给您.

$data = array('planet' => $planet);
$this->load->view('main_view', $data);
Run Code Online (Sandbox Code Playgroud)

有了它,您可以$planet在视图中使用.

例如,如果您执行以下操作:

$data = array('foo' => 'Hello', 'bar' => 'world');
$this->load->view('main_view', $data);
Run Code Online (Sandbox Code Playgroud)

$foo并将$bar在您的视图中提供.数组中的键值对会自动转换为视图中的变量.


jle*_*eft 12

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

调节器

排列

public function index()
{
    $this->load->model('main_model');
    $planet_data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $planet_data);
}
Run Code Online (Sandbox Code Playgroud)

宾语

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);
}
Run Code Online (Sandbox Code Playgroud)

CodeIgniter的用户手册:注意:如果使用对象,类变量将转换为数组元素.

视图

无论您如何传递数据,都可以显示如下:

<?php echo $planet; ?>
Run Code Online (Sandbox Code Playgroud)

如果它是一个数组,那么你需要迭代它.或者一个对象,然后访问它的成员变量.


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


小智 6

这是如何轻松完成的

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

现在在您的视图中,您可以通过这种方式访问​​该值

echo $planet;
Run Code Online (Sandbox Code Playgroud)