【问题标题】:Moving Data between Controllers and Models - Codeigniter Best Practices在控制器和模型之间移动数据 - Codeigniter 最佳实践
【发布时间】:2013-12-07 20:26:10
【问题描述】:

很抱歉这个简单的问题,但假设我使用 Ion-Auth 和 Codeigniter 来区分登录用户和未登录用户。

我有一个简单的自定义控制器,它可以像这样捕获用户的 ID:

class MY_Controller extends CI_Controller {
     function __construct() {
        parent::__construct();
        global $data;
            if($this->ion_auth->logged_in()){
            $data['logged'] = True;
            $data['uid'] = $this->ion_auth->get_user_id();
            $data['username'] = $this->ion_auth->get_username();
        }

        //User is Not Logged in
        else{
            $data['logged'] = False;
        }
    }
}

然后使用我的任何常规控制器,我想为登录用户而不是登录用户吐出一个页面......

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends MY_Controller {
        {
        global $data;
            if($data['logged']) {
                $this->load->view('logged_in', $data);
                }
            else{
                $this->load->view('not_logged_in', $data);
            }   
        }
}

我的问题是我应该如何将 uid 传递给我的模型?某些模型由不调用 $this->ion_auth->get_user_id(); 函数的默认 CI 控制器调用。我应该进入那些默认控制器并将 uid 传递给模型,还是应该直接在模型中调用函数 $this->ion_auth->get_user_id();

对于任何混淆,我深表歉意,我只是有一堆需要或不需要 user_id 的控制器和模型,并且试图避免对每个控制器和模型进行硬编码。

【问题讨论】:

    标签: php codeigniter oop ion-auth


    【解决方案1】:

    你不需要在模型中加载库,模型总是从控制器中调用,所以你只需要在控制器中加载库,函数将在他调用的模型中可用

    所以代码

    $this->ion_auth->get_user_id()
    

    适用于控制器加载的所有模型

    【讨论】:

    • 我知道,但我的目标是避免两次调用同一个函数。相反,我希望将我从 get_user_id 函数获得的控制器中的变量传递给模型。调用 get_user_id 两次似乎效率低下,而不是在控制器中调用它然后将其传递给模型。
    【解决方案2】:

    你可以做任何一个。

    我努力将 user_id 发送到数组中的模型(就像您一样)。它使模型更清晰,更易于阅读。

    例如:

      $data['uid'] = $this->ion_auth->get_user_id();
      $model_results = $this->some_model->get_data($data);
    

    但如果你愿意,你可以通过 CI 实例访问它

    开始模型

    function __construct()
    {
        parent::__construct();
    
        $ci =& get_instance();
    
    }
    

    然后我可以按如下方式访问 user_id:

     $user_id = $CI->ion_auth->get_user_id();
    

    【讨论】:

    • 对不起,我为什么要再次调用模型中的get_user_id?为什么不在我的 Controller 中调用它,然后将它从控制器传递给模型类?
    • 这完全是你自己的喜好。在研究您的问题时,我发现在我最近的 CI 应用程序中,我在模型中调用 get_user_id 的实例为零。我所有的模型都直接从控制器接收。
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2015-10-22
    相关资源
    最近更新 更多