11

コントローラーのコンストラクターでライブラリを使用して、ユーザーが 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

CodeIgniter のライブラリでセッションを使用するにはどうすればよいですか?

4

3 に答える 3

31

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

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

ライブラリの作成CodeIgniter ドキュメントを参照してください。具体的には、ライブラリ内の CodeIgniter リソースの利用の内容

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

重要: =&はタイプミスではありません。メモリを節約するために参照によって渡されます。

于 2012-09-10T02:19:26.133 に答える