我正在使用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。
我有个主意,请设置默认控制器(或自定义控制器)和实际控制器。首先单击链接,检查默认控制器中是否存在该功能,然后执行相同操作,否则将转到实际的控制器功能。
这可能吗?
答案 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';
};