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

login メソッドが 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 に答える