如何在CodeIgniter中分离具有相同名称的控制器功能

时间:2018-08-23 05:55:35

标签: php codeigniter-3 hmvc

我正在使用CodeIgniter HMVC。我有一个针对不同客户的教育性Web应用程序。

我需要为每个客户定制控制器。我们需要为不同的客户端提供不同的视图和功能,但前提是调用相同的URL。

例如,我正在使用模块,在我的控制器名称是Test.php。在该控制器中具有一个函数名称view()

    function view(){
       $this->load->view('view', $this->data);  
    } //The thing is that,each client need different views (view.php)

我要为所有客户端(http://test.com/test/view)使用相同的URL。

我有个主意,请设置默认控制器(或自定义控制器)和实际控制器。首先单击链接,检查默认控制器中是否存在该功能,然后执行相同操作,否则将转到实际的控制器功能。

这可能吗?

2 个答案:

答案 0 :(得分:0)

就您而言,我建议您使用$this->session->userdata('user_type')

类似这样的东西...

function view(){
    if($this->session->userdata('user_type') == 'Client1'){
        $this->load->view('view', $this->data);  //specify load view for client1
      }
    elseif($this->session->userdata('user_type') == 'Client2'){
        $this->load->view('view', $this->data);  //specify load view for client2
     }
} 

希望它将对您有帮助。

答案 1 :(得分:0)

您将需要使用一些用户信息来为用户选择正确的视图。 $this->load->view函数的第一个参数是要加载的文件。确保将为此目的所需的信息保存在用户的会话中。

在Trait或基础Controller类中定义以下内容,以在所有用户控制器中使用。

function view() {
    // optionally have a function generate $view or create it in the constructor
    // OR as a user specific filename use something like this
    // $view = 'view' . $this->session->userdata('test_view_suffix');
    if ($this->session->has_userdata('userdir')) {
        // in a user specific directory
        $view = $this->session->userdata('userdir');
    } else {
        $view = 'default';
    }
    // append the filename to the directory.
    $view = $view . '/view';
    $this->load->view($view, $this->data);
}

使用类似的方法定义路线。

$route['test/view'] = function () use (&$_SESSION) {
    $controller = $_SESSION['userdata']['controllerprefix'].'test';
    return $controller.'/view';
};