【问题标题】:How do I pass variables from a model to a controller to be used on a view in code igniter?如何将变量从模型传递到控制器以在代码点火器中的视图上使用?
【发布时间】:2012-12-13 17:27:26
【问题描述】:

我正在尝试在 codeigniter 中创建我的用户模块,但不知道如何将模型中的查询结果传递给允许我在视图中使用的控制器。

这是我的模型:

public function user() 
        {
            $session = $this->session->userdata('is_logged_in');
            $user_id = $this->session->userdata('id');
            $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1"); 
            foreach ($query->result() as $row)
            {
                $row->first_name;
                $row->id;
                $row->email;
                $row->last_name;
            }

        }

这是我的控制器。如何传递这些对象?或者我应该把它们放在一个数组中,然后传递数组(仍然不确定如何传递它),然后从我的控制器上的数组中提取它们?

public function edit() 
    {
        $data['first_name'] = $this->session->userdata('first_name');
        $data['profile_icon'] = 'edit';
        $data['profile_breadcrumbs'] = 'Edit Profile';
        $data['main_content'] = 'account/edit';
        $this->load->view('includes/templates/main_page_template', $data);
        $this->load->library('session');
        $this->load->model('account_model');
        $session = $this->session->userdata('session_id');
        $this->account_model->user();
        if($session)
        {
            //TRYING TO GET OBJECTS
        }
    }

我发现了与此相关的类似问题,但很难找到我正在寻找的内容。

提前致谢

【问题讨论】:

  • 为什么你得到这么多反对票?你是坏苹果还是坏人?
  • 我真的不知道,希望不会。这似乎是一个有效的问题,并且似乎很清楚并包含代码。我仍然认为反对投票应该有解释。

标签: php codeigniter variable-assignment


【解决方案1】:

控制器:

$data['user']=$this->account_model->user();
//populates $data['user'] with the user details based on the session.
$this->load->view('includes/templates/main_page_template', $data);

模型:

public function user() 
    {
        $session = $this->session->userdata('is_logged_in');
        $user_id = $this->session->userdata('id');
        $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1");
        if($query->num_rows()==1)
        {
           $data = $query->result_array();
           return $data[0];
        //above returns the single row you need to the controller as an array.
        //to the $data['user'] variable.
        } else {
           do something here to handle no return
        }
    }

然后在视图中可以通过 $user 变量访问您的数据,因此您可以这样做:

echo 'Hi '.$user['first_name'];

【讨论】:

    【解决方案2】:

    您必须将它分配给一个变量并使用它:

    $user = $this->account_model->user();
    
    foreach($user->result() as $row){
        echo $row->name;
    }
    

    如果你想将数据传递给视图,你必须确保在设置完所有$data之后最后加载视图:

    $user = $this->account_model->user();
    $data['user'] = $user;
    $this->load->view('includes/templates/main_page_template', $data);
    

    那么模型生成的用户数据将通过$user 变量在视图中可用。


    编辑:

    还注意到您没有 returning 模型中的任何内容:/

    型号:

    public function user() 
        {
            $session = $this->session->userdata('is_logged_in');
            $user_id = $this->session->userdata('id');
            $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1"); 
            return $query;
    
        }
    

    控制器:

    $user = $this->account_model->user();
    $data['user'] = $user;
    $this->load->view('includes/templates/main_page_template', $data);
    

    查看:

    foreach($user->result() as $row){
        $first_name = $row->first_name;
        $id = $row->id;
        $email = $row->email;
        $last_name = $row->last_name;
    }
    
    echo "User id: $id has $first_name as a first name, $last_name as their last name, and $email as their email address";
    

    因此,您的模型查询数据库并返回结果。控制器为它想要的数据调用模型中的函数(在本例中为user())并将其发送到视图。视图循环查询并显示数据。

    【讨论】:

    • 好的,这就是我要找的。我唯一的问题是您发布的第一个代码块进入模型并替换了我现有的 foreach 语句?
    • 并确保您的 user() 函数实际上返回了用户!如果您的 user() 函数没有返回任何内容,$user = $this->account_model->user(); 将无济于事。
    • @LightningWrist 我更新了答案;没有意识到您实际上并没有从模型中返回数据。我的例子只是一个例子;有很多方法可以做到。
    • 这就是我想要的!
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多