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

时间:2012-09-06 06:56:34

标签: 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);    
    }

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

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

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

7 个答案:

答案 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;