web-dev-qa-db-ja.com

CodeIgniterの別のコントローラーでコントローラー関数を呼び出す

私のcodeigniterアプリケーションにコントローラー「ユーザー」がいます。このコントローラには、logged_user_only()という関数があります。

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

この関数はis_logged()と呼ばれる別の関数を呼び出すので、セッションが設定されているかどうかをチェックするだけです。

この関数を同じコントローラー内の関数の先頭に配置すると、ユーザーがログインしていないかどうかが確認され、_login_form_にリダイレクトされます。それ以外の場合は続行されます。これは正常に動作します。例えば、

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

次に、別のコントローラーの関数でこのlogged_user_only()関数を呼び出して、ユーザーがログインしているかどうかを確認しますか?

PS。これができない、または推奨されない場合、複数のコントローラーでアクセスするためにこの機能をどこに配置すればよいですか?ありがとう。

11
Roman

コントローラーを拡張して、ログインメソッドが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

15
simnom

CIを使用して別のコントローラーを呼び出すことはできないため、お勧めしません。

logged_user_onlyヘルパーまたはさらに優れたコアコントローラーに、すべてのコントローラーを(MY_Controller)参照 http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/

9
fire

コントローラーからユーザーコントローラーをライブラリとしてロードするだけです

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

ここで、ユーザーコントローラーのこの関数を、コントローラー内の任意の場所で呼び出します。

$this->user->logged_user_only();
5
upendra allu

コントローラログインでの関数ログイン

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