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

2022-08-30 19:45:07

我是Codeigniter和OOP PHP的新手。

控制器:

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

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

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

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


答案 1

您必须将数组传递给视图。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


答案 2

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

控制器

数组

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; ?>

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


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


推荐