【问题标题】:Codeigniter access session in hooks pre_controller钩子 pre_controller 中的 Codeigniter 访问会话
【发布时间】:2020-01-08 03:50:39
【问题描述】:

当我加载会话库时只显示 找不到指定的类:Session.php 这是代码

$ci =& get_instance();
        $ci->load->database();
        $ci->load->library('session');
        if($ci->session->userdata('loggedin')){
            if($ci->session->userdata('owner_id')==0){
                $query = $ci->db->query("SELECT * FROM system WHERE user_id=".$ci->session->userdata('id')." LIMIT 1");
            }else{
                $query = $ci->db->query("SELECT * FROM system WHERE user_id=".$ci->session->userdata('owner_id')." LIMIT 1");
            }
        }else{
            $query = $ci->db->query("SELECT * FROM system WHERE id=1 LIMIT 1");
        }

【问题讨论】:

  • 如果 'Session.php' 是一个库,你为什么要这样加载它?为什么不通过默认的框架加载方式加载?
  • 我无法访问 Session。有没有不带load方法的代码访问Session?
  • 是的。事实上,你应该在 'config/autoload.php' 中加载会话库,并正常调用 '$ci->session->userdata('item_name')',一旦钩子它也是 CI 的一部分。请记住:作为框架(而不是应用程序)的一部分,HOOK 期望已加载所有内容,而不是加载库的正确位置。
  • @ShutUpMagda 我同意你的看法,但自动加载也不起作用。所以你能告诉我在加载任何功能之前如何使用会话项吗?实际上我需要检查用户登录,如果登录从数据库中获取一些信息,然后将配置设置为应用程序。你知道其他方法吗?
  • 没有别的办法。我不知道你为什么在pre_controller 中需要这个,但请记住,此时某些功能还没有完全加载。考虑切换到post_controller_constructor,这似乎更适合您的需求。

标签: php codeigniter session


【解决方案1】:

您可以使用构造函数来加载会话

public function __construct() {

    parent::__construct();
    $this->load->library('session');

}

或者在application/config/autoload.php中加载会话库

$autoload['libraries'] = array('session');

希望对你有帮助

【讨论】:

  • 不,我的朋友,这是不可能的,当我在自动加载中加载时还显示'无法找到指定的类:Session.php'
  • 你能展示你的扩展类吗@SasinduJayampathi
  • 使用控制器 CI_Controller
  • 可以换成MX_Controller看看吗?
猜你喜欢
  • 2011-01-12
  • 2023-03-08
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多