【问题标题】:CodeIgniter passing multiple arrays from controller to view [duplicate]CodeIgniter 将多个数组从控制器传递到视图 [重复]
【发布时间】:2013-01-03 02:31:26
【问题描述】:

可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”

我正在尝试将会话数据和数据库查询都传递给 Codeigniter 中的视图。我在视图文件中收到一条错误消息:“消息:未定义变量:数据”

问题在于 $idea 变量。变量注册一个未定义的错误。

控制器:

public function members() {

    if($this->session->userdata('is_logged_in')){
        $session = $this->session->all_userdata();
        $facebook_id = $data['id']; 


        $this->load->model('idea'); 
        $idea = $this->idea->get_idea($facebook_id); 

        //merge the two arrays to get data variable
        $data = $session + $idea; 
        $this->load->view('members', $data); 
    } else {
        redirect('main/login'); 
    }
}

型号:

public function get_idea($facebook_id) {
    $data = array(
        'id' => '', 
        'idea' => '', 
        'facebook_id' => $facebook_id
    );

    $query = $this->db->get('idea', $facebook_id); 

    return $query->result_array(); 

}

以下是我使用的一些资源:
-Creating foreach loops using Code Igniter controller and view
-codeigniter: pass array from controller to view
-http://blog.mattheufarmer.com/2010/building-a-website-in-codeigniter-part-ii-getting-data-and-using-it/

感谢您的帮助!

【问题讨论】:

  • @tereško:这怎么是重复的?链接的问题是关于基本的 PHP 变量引用,而这个问题是关于在 MVC 层之间传递参数。
  • @Kaivosukeltaja,您是否阅读了这部分内容:“我正在尝试将会话数据和数据库查询都传递给 Codeigniter 中的视图。我的视图文件中出现错误提示: '消息:未定义的变量:数据'" ?
  • @tereško:是的,我做到了,这意味着变量没有正确传递给视图。链接的问题对此事有何帮助?
  • @Kaivosukeltaja ,您是否也注意到这部分 $facebook_id = $data['id'];$data 是从哪里来的?错误信息是什么意思?
  • @tereško:我认为这是一些与 CodeIgniter 相关的魔法,因为接受的答案也使用 $data 而不进行初始化。不过我可能错了,因为我不熟悉 CI。

标签: php codeigniter undefined


【解决方案1】:

你可以这样做-

public function members() {

    if($this->session->userdata('is_logged_in')){
        $data['session'] = $this->session->all_userdata();
        $facebook_id = $data['id']; 


        $this->load->model('idea'); 
        $data['idea'] = $this->idea->get_idea($facebook_id); 

        $this->load->view('members', $data); 
    } else {
        redirect('main/login'); 
    }
}

【讨论】:

  • 谢谢!我改了:$facebook_id = $data['session']['id'];
  • @MichaelF,这里解释了它是如何完成的stackoverflow.com/a/14122060/1592648
  • 那个$data['id'];从哪里来?
【解决方案2】:
$data = $session + $idea; 

没有。就是不行。这不是你合并数组的方式。

一种更简洁、更周到的方法来做你想做的事:

$data = array( $session, $idea );

否则,

$data = array_merge($session, $idea);

编辑:

你应该阅读这个http://ellislab.com/codeigniter/user-guide/general/views.html

无论如何,除非你在做一些完全愚蠢的事情,否则你应该能够做到这一点:

$data = array( 'sesssion' => $sesssion, 'idea' => $idea ); 

并将其传递给您的视图。然后在你看来,你可以用 $session 调用 session,用 $idea 调用 idea。举例说明:

$data = array('name' => 'josh', 'sex' => 'often');
$this->load->view('welcome', $data);

然后在我看来:

<? echo "$name has sex $sex"; // returns josh has sex often ?>

在视图中,键成为变量,值由这些变量访问(它们是 $data 中的键)。你不调用$data,你调用key。

$data = array('key' => 'value');

如果您有任何其他问题,请告诉我。 :)

【讨论】:

  • 我之前尝试过array_merge,但我仍然得到'未定义变量:数据'错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 2011-09-12
  • 2011-09-09
  • 1970-01-01
  • 2016-05-30
相关资源
最近更新 更多