2012-09-10 42 views
8

Quiero comprobar si el usuario está conectado en CodeIgniter utilizando mi biblioteca en el constructor del controlador.¿Cómo puedo usar la sesión en una biblioteca en CodeIgniter?

Esta es mi biblioteca:

class Administrator_libs { 

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

y este es mi controlador:

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

pero me sale este mensaje de error:

Undefined property: Administrator_libs::$session 

¿Cómo puedo usar sesión en una biblioteca en CodeIgniter?

Respuesta

28

Si desea acceder a cualquier biblioteca de CodeIgniter dentro de la suya, debe llamar al get_instance(). Esto se debe a que $this está vinculado a su biblioteca actual y no al objeto CodeIgniter.

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

Por favor, vea Creating Libraries CodeIgniter Documentación. Específicamente el contenido bajo utilización de los recursos de CodeIgniter dentro de su Biblioteca

Esto supone que autoLoad la biblioteca sesión en config/autoload.php, si no, también tendrá que añadir $CI->load->library("session"); después $CI de instancias.

IMPORTANTE:=& no es un error tipográfico. Se pasa por referencia para guardar memoria.

0

Usted simplemente debe ir a la aplicación/autoload.php y añadir su paquete de carga automática que debe parecerse a algo como esto: $autoload['packages'] = array('database','form_validation','session','email');

se puede ver que es el paquete de sesión que he añadido en mis paquetes. Ahora que se acerca a su constructor que debe cargar este paquete añadiendo esto: $this->load->library("session");

0

sesión y cualquier otra lib/ayudante, etc se extiende desde CI_Controller/CI_Model/etc ... Si se trata de utilizar $this->whatever en una biblioteca que no se extiende desde ninguno de estos módulos CI, obtendrá el error. Como dice Jordan, puedes usar get_instance.

Cuestiones relacionadas