2012-09-10 3 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 

가 어떻게이에 세션을 사용할 수 있습니다 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에서 세션 라이브러리를 자동로드 가정합니다.

중요 :=&은 오타가 아닙니다. 그것은 메모리 절약에 대한 참조에 의해 전달됩니다.

0

당신은 단순히 응용 프로그램/autoload.php로 이동 다소 이런 같아야 당신의 자동로드 패키지를 추가해야합니다 : 난 내 패키지에 추가 세션 패키지가 당신이 볼 수 $autoload['packages'] = array('database','form_validation','session','email');

합니다. 이제 생성자에 오는이 추가하여이 패키지를로드해야합니다 : $this->load->library("session");

0

세션 및 다른 lib 디렉토리/도우미 등 이 CI_Controller/CI_Model/등에서을 확장 ... 당신은에 $this->whatever를 사용하려는 경우 라이브러리가이 CI 모듈에서 확장되지 않으면 오류가 발생합니다. 요르단에 따르면 get_instance를 사용할 수 있습니다.

관련 문제