13

我的 codeigniter 应用程序中有一个控制器“用户”。这个控制器有一个函数叫做logged_user_only()

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

当这个函数调用另一个名为的函数is_logged()时,它只检查会话是否已设置,如果是则返回 true,否则返回 false。

现在,如果我将此函数放在同一控制器中任何函数的开头,它将检查用户是否未登录,否则它将重定向到login_form继续。这工作正常。例如,

public function show_home()
    {
        $this -> logged_user_only();
        $this->load->view('show_home_view');
    }

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

PS。如果不能这样做,或者不建议这样做,我应该在哪里放置这个功能来访问多个控制器?谢谢。

4

4 回答 4

15

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

class MY_Controller extends CI_Controller {
    public function is_logged()
    {
        //Your code here
    }
}

然后您的主控制器可以将其扩展如下:

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

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

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

于 2011-07-11T08:06:05.933 回答
9

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

将您logged_user_only的所有控制器移至帮助器甚至更好的核心控制器(MY_Controller),请参阅http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/

于 2011-07-11T08:02:52.987 回答
6

只需从您的控制器加载用户控制器作为库

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

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

$this->user->logged_user_only();
于 2017-04-04T09:32:11.713 回答
0

控制器登录中的功能登录

$data =array('username' => $this->input->post('username'), 'password' => $this->input >post('password')) $query = $this->db->get_where('usertable',$data)
    if ($query->num_rows() == 1) {
        $data = array(
            'username' => $this->input->post('username'),
            'logged_in' => TRUE,
            'role' => "user");
        $this->session->set_userdata($data);
        redirect('home');
    } 

控制器用户中的函数构造

if ($this->session->userdata('logged_in') == TRUE && $this->session->userdata('role') == "user") {} else {redirect('home');}
于 2013-06-13T15:50:38.977 回答