【问题标题】:Calling a Controller function in another Controller in CodeIgniter在 CodeIgniter 中调用另一个 Controller 中的一个 Controller 函数
【发布时间】:2011-10-02 14:11:19
【问题描述】:

我的 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。如果不能这样做,或者不建议这样做,我应该在哪里放置这个功能来访问多个控制器?谢谢。

【问题讨论】:

    标签: php codeigniter class-visibility codeigniter-classloader


    【解决方案1】:

    为什么不扩展控制器,以便登录方法在 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

    【讨论】:

      【解决方案2】:

      使用 CI 无法从另一个控制器调用控制器,因此不建议这样做。

      要么将您的 logged_user_only 移动到帮助程序中,甚至更好地作为核心控制器,您可以从 (MY_Controller) 扩展所有控制器,请参阅 http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/

      【讨论】:

        【解决方案3】:

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

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

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

        $this->user->logged_user_only();
        

        【讨论】:

          【解决方案4】:

          控制器登录中的功能登录

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多