2012-09-10 19 views
8

Denetleyicinin yapıcısında kitaplığımı kullanarak kullanıcının CodeIgniter'de oturum açıp açmadığını kontrol etmek istiyorum. CodeIgniter'de bir kitaplıktaki oturumu nasıl kullanabilirim?

Bu

benim kütüphane:

class Administrator_libs { 

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

Ve bu benim denetleyicisi geçerli:

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'); 
    } 
} 

Ama bu hata mesajını alıyorum:

Undefined property: Administrator_libs::$session 

nasıl oturumu kullanabilirsiniz CodeIgniter kütüphanesi?

cevap

28

Herhangi bir CodeIgniter kitaplığına kendi içinizde erişmek isterseniz, get_instance() numaralı telefonu aramanız gerekir. Bunun nedeni, $this'un geçerli kitaplığınıza değil CodeIgniter nesnesine bağlı olmasıdır.

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

Creating Libraries CodeIgniter Belgeleri bakınız. Özellikle Sizin Kütüphane

içinde CodeIgniter'ın Kaynakları Yararlanma altında içerik Bu, aynı zamanda $CI örnekleme sonra $CI->load->library("session"); eklemeniz gerekir değilse sen, config/autoload.php oturum kütüphanesini özdevinimli_yükle varsayar.

ÖNEMLİ:=& bir yazım hatası değil. Hafızayı kaydetmek için referans olarak geçti.

0

Sadece uygulama/autoload.php gidip biraz böyle gibi görünmelidir sizin özdevinimli_yükle paketi eklemek gerekir: benim ambalajlarda eklenen seans paket var Gördüğünüz $autoload['packages'] = array('database','form_validation','session','email');

. Şimdi yapıcı gelen bu ekleyerek bu paketi yüklenmelidir: $this->load->library("session");

0

Oturumunu ve diğer lib/yardımcı, vs CI_Controller/CI_Model/vs den uzanır ... Bir üzerinde $this->whatever kullanmaya çalışıyorsanız Bu CI modüllerinin herhangi birinden genişletmeyen kütüphane, hatayı alırsınız. Jordan'ın dediği gibi get_instance'ı kullanabilirsiniz.

İlgili konular