在Codeigniter中动态更改默认控制器

时间:2012-09-22 02:38:16

标签: codeigniter controller

我想在codeigniter中更改我的默认控制器是否可能?对于我想要显示不同控制器的客人和另外一个

的会员
if($this->cuser->usercode()){
//loading default controller

$route['memebers_welcome'];

}else{

$route['guests_welcome'];

}

如果有可能请提示,否则我将不得不使用重定向功能,我认为这不是一个好习惯。

2 个答案:

答案 0 :(得分:3)

或许对这个问题有不同的看法。而不是根据用户是否登录来尝试选择控制器,让“欢迎”控制器为登录用户或未登录用户加载不同视图是很常见的。

class Welcome extends CI_Controller {
    public function index() {
        # ...
        if ($this->cuser->usercode()) {
            $this->load->view('members_welcome');
        } else {
            $this->load->view('guests_welcome');
        }
    }
    # ...
}

或者,如果有完全独立的逻辑组来制作单独的函数,则可以轻松调用另一个控制器方法而无需重新加载页面。

class Welcome extends CI_Controller {
    public function index() {
        if ($this->cuser->usercode()) {
            $this->_members_welcome();
        } else {
            $this->_guests_welcome();
        } 
    }

    private function _members_welcome() {
        # ... do stuff for members
    }

    private function _guests_welcome() {
        # ... do stuff for guests
    }
}

使用这种方法来实际指导用户要好得多,因为你不希望造成不必要的开销和页面加载。

答案 1 :(得分:1)

我不这么认为。您不能因为更改控制器,首先必须确定用户是否已登录,您可以在控制器内检查这个,这是最简单/最合适的方式,AFAIK。

因此,只需为两种类型的用户保留默认控制器,并检查用户类型,并在用户不是成员的情况下从该控制器/页面重定向到新的控制器/页面。你可以在默认控制器的构造函数中检查这个。