0

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

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

$route['memebers_welcome'];

}else{

$route['guests_welcome'];

}

如果可能,请告知,否则我将不得不使用重定向功能,我认为这不是好的做法。

4

3 回答 3

3

Perhaps a different perspective on the issue. Instead of trying to choose your controller based on whether a user is logged in, it's quite common to have your 'welcome' controller load a different view for a logged in or not logged in user.

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

Alternatively, if there are completely separate sets of logic that makes sense to make separate functions, you can easily call another controller method without needing to reload the page.

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
    }
}

It's much better to use this method that to actually direct users as you don't want to cause unecessary overhead and page loads.

于 2012-09-22T03:05:31.120 回答
1

是的,你可以。这是重用代码的好方法。

创建自己的控制器

例如,如果您想要一个用户控制器和管理员控制器。转到application/core文件夹并在那里创建它们:

class UserController extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        if ( !is_logged() )
        {
            show_error('get out of here') // sorry, you are not logged
        }
        // load necessary libraries or helpers for logged user

    }
}

如果你想要一个管理区域的控制器,你可以这样做:

class AdminController extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        if ( !is_admin() )
        {
            show_error('only for admins') // sorry, you are not admin
        }
        // load necessary libraries or helpers for admin

    }
}

将控制器加载到系统中

为了让控制器作为 CI 系统的一部分加载,您需要指定它们的驻留位置。因此,在application/config/config.php文件的末尾放置:

function __autoload($class)
{
    if (strpos($class, 'CI_') !== 0)
    {
        if (file_exists($file = APPPATH . 'core/' . $class . EXT))
        {
            include $file;
        }

        else if (file_exists($file = APPPATH . 'libraries/' . $class . EXT))
        {
            include $file;
        }
    }
}

测试你的控制器

现在您可以扩展上述控制器之一以根据您的网站区域使用它:

class Logout extends UserController{

或者

class EditUser extends AdminController{
于 2012-09-23T04:46:44.810 回答
1

我不这么认为。你不能因为要更改控制器,首先你必须确保用户是否登录,你可以从控制器中检查它,这是最简单/正确的方法,AFAIK。

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

于 2012-09-22T02:58:04.550 回答