我想通过在控制器的构造函数中使用我的库来检查用户是否登录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中的库中使用会话?
答案 0 :(得分:30)
如果您想访问自己的任何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->load->library("session");
实例化后添加$CI
。
重要提示: =&
不是拼写错误。它通过引用传递以节省内存。
答案 1 :(得分:0)
您只需转到application / autoload.php并添加自动加载包,其外观应如下所示:$autoload['packages'] = array('database','form_validation','session','email');
你可以看到我在我的包中添加了会话包。现在来到您的构造函数,您应该通过添加以下内容来加载此包:$this->load->library("session");
答案 2 :(得分:0)
会话和任何其他lib / helper等扩展来自CI_Controller / CI_Model / etc ...
如果您尝试在未从任何此CI模块扩展的库上使用$this->whatever
,则会收到错误。
正如乔丹所说,你可以使用get_instance。