【问题标题】:How can I use session in a library in CodeIgniter?如何在 CodeIgniter 的库中使用 session?
【发布时间】:2012-09-10 02:13:44
【问题描述】:

我想通过在控制器的构造函数中使用我的库来检查用户是否已登录 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?

【问题讨论】:

    标签: php codeigniter controller


    【解决方案1】:

    如果您想访问自己内部的任何 CodeIgniter 库,您必须调用 get_instance()。这是因为$this 绑定到您当前的库而不是 CodeIgniter 对象。

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

    请参阅Creating Libraries CodeIgniter 文档。特别是在您的库中使用 CodeIgniter 资源

    下的内容

    这假设您在config/autoload.php 中自动加载会话库,如果没有,您还需要在$CI 实例化之后添加$CI->load->library("session");

    重要提示: =& 不是错字。它通过引用传递以节省内存。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • Jordan's answer 在 2012 年也提到了 autoload CI 功能,但您仍然需要 $CI =& get_instance() 才能在另一个库中访问该库。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-03-11
        • 2016-06-24
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        • 2012-07-16
        • 2019-12-04
        相关资源
        最近更新 更多