1

ユーザーがセッションを開始したかどうかを確認するコンストラクターで検証を行っています。

次に、さまざまなことのためにいくつかのコントローラーを投入しています。

私の質問は - コンストラクト関数 (セッション検証) の影響を受けないコントローラーをいくつか持つことができますか、それとも別のファイルに取り込む必要がありますか? その理由は、コンストラクターに 2 つの関数セットが必要なためです。1 つはユーザーがログインしているとき用で、残りはログインしていないとき用です。

以前は 2 つのファイルがあり、それらを切り替えていましたが、それらを 1 つに結合することにしました。

ありがとう

4

2 に答える 2

3

あなたがする必要があるのは、セッションを管理し、ログインしたコントローラーをログアウトしたコントローラーから継承によって分割する基本コントローラーをセットアップすることです。

Phil Sturgeon のKeeping It Dryに関する投稿をご覧になることをお勧めします。Phil は彼の投稿で、毎回チェックする必要がないように、親コントローラーがセッションを監視するようにコントローラーを実装する方法の基本を説明しています。

例として:

マイコントローラー:

class MY_Controller extends CI_Controller{
    function __construct(){
        parent::__construct();
        //do things in here that ALL controllers should do.
    }
}

MY_In_Controller:

class MY_In_Controller extends MY_Controller{
    function __construct(){
        parent::__construct();
        //if user doesnt have the session redirect them out NOW!
    }
}

MY_Out_Controller:

class MY_Out_Controller extends MY_Controller{
    function __construct(){
        parent::__construct();
        //if the user has the session, redirect them in NOW.
    }
}

ログイン コントローラ:

class Login extends MY_Out_Controller{
    function __construct(){
        parent::__construct();
    }

    function index(){
        //folks that have a session (already logged in) will never even get here.
        //because the parent class MY_Out_Controller already redirected them back in.
    }
}

コントローラーの管理:

class Manage extends MY_In_Controller{
    function __construct(){
        parent::__construct();
    }

    function index(){
        //folks that don't a session (logged out) will never even get here.
        //because the parent class MY_In_Controller already redirected them out.
    }
}

つまり、セッション チェックをコントローラに直接記述しないでください。頻繁に書きすぎて、DRY 原則に違反することになります。

更新: CodeIgniter の Base Classes Revisitedで Shane Pearson のメソッドを使用して、Phil のメソッドを改良することをお勧めします。

于 2012-09-19T00:13:35.103 に答える