2012-09-10 9 views
8

コントローラのコンストラクタで自分のライブラリを使用して、CodeIgniterにログインしているかどうかを確認したいと思います。CodeIgniterでライブラリ内のセッションを使用するにはどうすればよいですか?

これは私のライブラリです:

class Administrator_libs { 

    public function validate_authen(){ 
     if($this->session->userdata('user_authen')){ 
      redirect(base_url().'admin/login/'); 
     } 
    } 
} 

そして、これは私のコントローラである:

class Administrator extends CI_Controller { 

    public function __construct(){ 
     parent::__construct(); 
     $this->load->library('administrator_libs'); 
     $this->administrator_libs->validate_authen(); 
     $this->load->model('mod_menu'); 
    } 
} 

しかし、私は、このエラーメッセージが出ます:

Undefined property: Administrator_libs::$session 

どのように私はAでセッションを使用することができますがCodeIgniterのライブラリですか?

答えて

28

あなた自身のCodeIgniterライブラリにアクセスする場合は、get_instance()に電話する必要があります。これは、$thisが現在のライブラリにバインドされており、CodeIgniterオブジェクトにバインドされていないためです。

$CI =& get_instance(); 
if($CI->session->userdata('user_authen')){ 
    redirect(base_url().'admin/login/'); 
} 

Creating Libraries CodeIgniter Documentationを参照してください。具体的にあなたのライブラリ

内CodeIgniterのリソースを活用し下のコンテンツはこれは、あなたも$CIインスタンス化した後$CI->load->library("session");を追加する必要がありますない場合は、config/autoload.phpでセッションライブラリを自動ロードを前提としています。

重要:=&はtypoではありません。これは、メモリを節約するために参照渡しされます。

0

あなたは、単にアプリケーション/ autoload.phpに行くと多少のようにのようになりますあなたの自動ロードパッケージを追加する必要があります$autoload['packages'] = array('database','form_validation','session','email');

あなたは私が私のパッケージに追加セッションパッケージがある見ることができます。今、あなたはこれを追加することで、このパッケージをロードする必要があり、あなたのコンストラクタに来て:あなたは$this->whateverを使用しようとしている場合は$this->load->library("session");

0

セッションや他のlibに/ヘルパーなどは... CI_Controller/CI_Modelの/ etcから をを拡張しますこのCIモジュールから拡張されていないライブラリを使用すると、エラーが発生します。 ヨルダンによれば、get_instanceを使うことができます。

関連する問題