0

codeigniter で動的グローバルを使用するベスト プラクティスは何ですか?

ライブラリを試したデータからロードするキーに基づいて、定数を含むファイルをロードしたいのですが、モデルが初期化される前にロードされます

どのように動作させたいですか:

1) ユーザーがログインします 2) このユーザーが (データベースからの) 通常のユーザーであるか管理者であるかを php がチェックします 3) 通常のユーザーである場合は、それに応じてグローバル変数を定義します。それ以外の場合は、別のグローバル変数を使用します

これは、人がログインしたときに1回だけ発生するはずです。これはまさに私が行う方法です:

ユーザーがログインすると、php が (同じコントローラーで) グローバル変数をどのように定義する必要があるかをチェックします。それらを定義しますが、別のコントローラーからこれらの変数を呼び出すとすぐに、それらは消去されます。(私はAJAXで別のコントローラーを呼び出します)ああ、複数のAJAXリクエストを同時に実行するとCIにバグがあることも言う必要があります(同時AJAXを使用する場合、CIセッションは使用できません)

だから問題は本当にです:どうすればそれらが消去されないようにできますか?

ありがとう

4

1 に答える 1

1

最初 - 簡単な部分:

AJAX を使用した CodeIgniter データベース セッションが解決されました(ごく最近)。

2番目 - グローバルに関して:

あなたへの私のアドバイスは、まず CodeIgniter のクラスを拡張して、 Keeping It DryCI_Controllerというタイトルの Phil Sturgeon のブログで概説されている手法を実装することです。これが完了したら、すべてのコントローラーを から直接ではなくから継承します。MY_ControllerCI_Controller

その後MY_In_Controller、 、MY_Out_ControllerMY_Admin_Controller...etc を から拡張できますが、MY_Controller余談になります。重要な部分は、新しいベース コントローラーでログイン状態を確認し、グローバルを設定することです。

class MY_Controller extends CI_Controller{
    function __construct(){
        parent::__construct();

        $l = $this->session->userdata("loggedin");
        if((!isset($l))||($l==FALSE)){
            /*user is logged out - set appropriate globals*/
        }
        else{
            /*user is logged in - fetch them from the database and set appropriate globals*/
        }
    }
}

Blogこれで、 、News、または などの新しいコントローラーを作成するときにAbout、毎回グローバルを設定する必要がなくなり、コントローラー、モデル、およびビューでアクセスできるようになります。親クラスが面倒を見るからです。

于 2012-09-10T22:35:15.393 に答える