如何在 CodeIgniter 的库中使用 session?
Posted
技术标签:
【中文标题】如何在 CodeIgniter 的库中使用 session?【英文标题】:How can I use session in a library in CodeIgniter? 【发布时间】: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
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于如何在 CodeIgniter 的库中使用 session?的主要内容,如果未能解决你的问题,请参考以下文章
使用Amazon SES的Codeigniter SMTP电子邮件
Visual Studio 2013 - 如何在我自己的库中链接/包含其他库