2012-03-06 13 views
0

現在のユーザーID、現在のユーザーレバーなど、ウェブサイトで使用するグローバル変数を保存します。それを行うための最良の場所はどこですか、または可能ですか?CodeIgniterのグローバル変数

"$ this"がそこで認識されないので、constants.phpに設定することはできません。

私はセッションを使用して好きではないので、これはされて(私は$this->session->userdata('session_name')ので実用的ではないような文字列を作成することを検討し、CURR_UIDような何かを書くことは、それを行うと、同様読みがより簡単です)したい主な理由

+3

うん完全にこのような何か。どこにいてもグローバルは常に優れています。そのシンプルさは、何年も何年もの戦闘テストを経て、現場で最も明るい人たちのベストプラクティスとして合意された、通常のオブジェクト指向の原則よりもはるかに実用的です。 - *** sigh *** - – rdlowrey

+1

処理するデータは、セッションデータです。したがって、セッションが気に入らなくても、それがこのデータを処理する最良の方法です。 –

+0

セッションはグローバル変数と比較できません。あなたはリンゴとオレンジを比較しています – zerkms

答えて

1

これは可能ですが、Codeigniterが設計された方法ではありません。セッションは本当にこの種のもののための場所です(つまり、あるページビューから次のページビューに続くもの)が、あなたが望むならば、美しさのためにwrap the session calls up in a libraryすることができます。

// in libraries/User.php 
class User { 

    protected $ci; 

    public function __construct() { 
    $this->ci = &get_instance(); 
    } 

    public function id() { 
    return $this->ci->session->userdata('user_id'); 
    } 

    // etc, etc. 
} 

あなたはid()のようないくつかのより多くのヘルパーを書いた後は、あなたが他の場所で、アプリケーションに関連した変数にアクセスするためにそれらを使用することができます:

$this->load->library('user'); 
echo 'Current user ID is: ' . $this->user->id(); 
+0

おかげさまで@rjzなので結局それを定義することはできませんが、クラスとfuntionsを使う必要があります...あまりにも悪いですが、それでも$ this-> ci-> session-> userdata ('ユーザーID'); – GabrielCol

+2

あなたはそれを定義することはできますが(上記のコメントから推測できるように)、これらの種類のものは通常災害で終わります:-)関数id()の – rjz

+0

に戻ります。 – GabrielCol

1

この場合にできることは、class My_Controller extends CI_Controllerを作成することです。特定のコントローラー機能を実際にロードする前に必要なすべての機能を並べ替えます。

次に作成するクラスはすべて、class Whatever extends My_Controllerです。

編集:アプリケーション>コアフォルダ内にMy_Controllerクラスを配置する必要があることを言いました。