我的codeigniter应用程序中有一个控制器“user”。该控制器有一个名为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。如果无法做到这一点,或者不推荐,我应该在多个控制器中将此功能放在哪里?感谢。
答案 0 :(得分: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;
}
}
}
有关详细信息,请访问: Creating Core System Classes
新链接在这里: https://www.codeigniter.com/user_guide/general/core_classes.html?highlight=core%20classes
答案 1 :(得分:8)
使用CI无法从另一个控制器调用控制器,不推荐使用。
将您的logged_user_only
移动到帮助器中,或者更好地将您的所有控制器扩展为(MY_Controller
)的核心控制器,请参阅http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/
答案 2 :(得分:5)
只需在控制器中将用户控制器加载为库
function __construct(){
parent::__construct();
$this->load->library('../controllers/user');
} 现在,在控制器的任何位置调用用户控制器的这个功能,
$this->user->logged_user_only();
答案 3 :(得分: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');
}
Controller用户中的函数构造
if ($this->session->userdata('logged_in') == TRUE && $this->session->userdata('role') == "user") {} else {redirect('home');}