【问题标题】:How can I separate controller function with same name in CodeIgniter如何在 CodeIgniter 中分离具有相同名称的控制器功能
【发布时间】:2018-08-23 05:55:35
【问题描述】:

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

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

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

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

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

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

这可能吗?

【问题讨论】:

  • 有没有想过参数的用法?另外,你真的需要一个新的观点。 php 对于每个用户?
  • 你可以使用路由
  • 是的..我怎样才能做到这一点
  • 那么在控制器中只需获取用户类型,然后根据用户类型制作一个 switch 语句,根据用户类型切换视图。有什么想法。
  • 你也可以在这里得到答案stackoverflow.com/questions/30723525/…

标签: php codeigniter-3 hmvc


【解决方案1】:

在你的情况下,我可以建议使用$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
     }
} 

希望对你有所帮助。

【讨论】:

  • 这种方式不是很好的选择..我需要一个针对不同客户端的定制控制器(这只是一个视图更改,在某些客户端有很多功能更改)
  • 不,不需要自定义。如您所见,您只需要自定义或设置您的客户帐户即可显示其加载视图。您的控制器将是相同的,只需遵循控制器内部的条件。
  • 最主要的是,新的变化不会影响我们已经创建的功能,这就是我建议相同的原因。
  • 我的意思是每个客户端的自定义文件夹(自定义控制器、模型、视图)。计数基于客户端。所有额外的客户端要求不会影响核心文件
  • 是的...您可以自定义条件内的文件夹。例如:$this->load->view('view1', $this->data);你可以在里面改变它。
【解决方案2】:

您需要使用一些用户信息来为用户选择正确的视图。 $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';
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 2016-05-10
    • 2016-05-03
    • 2017-03-08
    • 2013-06-14
    • 2013-12-03
    • 2015-07-18
    • 2014-08-26
    相关资源
    最近更新 更多