在CodeIgniter中的另一个Controller中调用Controller函数

Rom*_*man 11 php codeigniter class-visibility codeigniter-classloader

我的codeigniter应用程序中有一个控制器"user".该控制器具有以下功能logged_user_only():

public function logged_user_only()
    {
        $is_logged = $this -> is_logged();
        if( $is_logged === FALSE)
        {
            redirect('user/login_form');
        }
    }
Run Code Online (Sandbox Code Playgroud)

由于此函数调用另一个被调用的函数is_logged(),它仅检查会话是否已设置,如果是,则返回true,否则返回false.

现在,如果我将此函数放在同一控制器内的任何函数的开头,它将检查用户是否未被记录,它将重定向到login_form否则继续.这很好用.例如,

public function show_home()
    {
        $this -> logged_user_only();
        $this->load->view('show_home_view');
    }
Run Code Online (Sandbox Code Playgroud)

现在我想logged_user_only()在另一个控制器的函数中调用此函数来检查用户是否已登录?

PS.如果无法做到这一点,或者不推荐,我应该在多个控制器中将此功能放在哪里?谢谢.

sim*_*nom 15

为什么不扩展控制器,以便登录方法在MY控制器内(在应用程序的核心文件夹中),所有其他控制器都扩展它.例如,您可以:

class MY_Controller extends CI_Controller {
    public function is_logged()
    {
        //Your code here
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你的主控制器可以扩展如下:

class Home_Controller extends MY_Controller {
    public function show_home()
    {
         if (!$this->is_logged()) {
           return false;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请访 创建核心系统类

新链接在这里:https: //www.codeigniter.com/user_guide/general/core_classes.html?highlight = core%20classes


fir*_*ire 9

使用CI无法从另一个控制器调用控制器,不推荐使用.

要么转移logged_user_only到帮助器,要么更好的是从(MY_Controller)扩展所有控制器的核心控制器,请参阅http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/


小智 5

只需从控制器将用户控制器加载为库

function __construct(){
     parent::__construct();
     $this->load->library('../controllers/user');
}
Run Code Online (Sandbox Code Playgroud)

现在,在控制器中的任何位置调用用户控制器的此功能,

$this->user->logged_user_only();
Run Code Online (Sandbox Code Playgroud)