在CodeIgniter中调用另一个控制器中的控制器函数

oyxsuwqo  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(251)

我在我的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.如果这不能做到,或者不推荐,我应该把这个功能放在哪里在多个控制器中访问?谢谢。

vq8itlhq

vq8itlhq1#

为什么不扩展控制器,使login方法位于MY控制器中(位于应用程序的core文件夹中),而所有其他控制器都扩展它。例如,您可以有:

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

kninwzqo

kninwzqo2#

使用CI无法从另一个控制器调用控制器,因此不推荐使用。
要么将logged_user_only移到一个助手中,或者更好地移到一个核心控制器中,您可以从(MY_Controller)扩展所有的控制器,请参阅http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/

wydwbb8l

wydwbb8l3#

只是从你的控制器加载用户控制器作为库

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

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

$this->user->logged_user_only();
0mkxixxg

0mkxixxg4#

控制器登录中的功能登录

$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');}

相关问题