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 的库中使用 session?

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 回答
0

你应该简单地去 application/autoload.php 并添加你的自动加载包,它应该看起来像这样:$autoload['packages'] = array('database','form_validation','session','email');

你可以看到我在我的包中添加了会话包。现在来到你的构造函数,你应该通过添加这个来加载这个包:$this->load->library("session");

于 2017-03-29T06:37:56.413 回答
0

Session 和任何其他 lib / helper 等从 CI_Controller / CI_Model / etc扩展...如果您尝试$this->whatever在不从任何此 CI 模块扩展的库上使用,您将收到错误消息。正如 Jordan 所说,您可以使用 get_instance。

于 2018-01-14T15:06:58.920 回答