Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CodeIgniter中的全局变量不工作_Codeigniter_Variables_Global - Fatal编程技术网

CodeIgniter中的全局变量不工作

CodeIgniter中的全局变量不工作,codeigniter,variables,global,Codeigniter,Variables,Global,我想通过创建自己的库和配置文件在CodeIgniter中生成全局变量。这是我在我的库文件中写的,比如globalvars.php。我把它放在/应用程序/库中 class Globalvars{ function __construct($config = array()) { foreach ($config as $key => $value) { $data[$key] = $value; }

我想通过创建自己的库和配置文件在CodeIgniter中生成全局变量。这是我在我的库文件中写的,比如globalvars.php。我把它放在/应用程序/库中

class Globalvars{

    function __construct($config = array()) 
    {
        foreach ($config as $key => $value) {
            $data[$key] = $value;
        }
        $CI =& get_instance();
        $CI->load->library('session');
        $CI->load->vars($data); 
    }
}
我希望存储在会话中的用户id在全局变量中可用,所以我在配置文件中写了这个。它也被命名为globalvars.php。它位于/application/config目录中

$config['user']=$this->session->userdata('id');
然后,我以这种方式将其写入控制器,以测试它是否正常工作

echo $data['user'];
但是我在浏览器中发现了这个错误

Message: Undefined property: CI_Loader::$session
Filename: config/globalvars.php

会话功能似乎还没有定义。我怎样才能让它工作?我错过了什么?任何帮助都将不胜感激。

您不能使用
配置
文件中的
会话


config
文件是在任何库之前加载的,因此
$this->session
是未定义的。

必须加载
config.php
才能初始化session类,因为它从该文件读取设置

这种类型的很多问题(设置一些“全局”数据)可以通过使用基本控制器来解决,并在控制器中扩展它

// core/MY_Controller.php
MY_Controller extends CI_Controller {

    function __construct()
    {
        parent::__construct(); // Now the Session class should be loaded
        // set config items here 
    }
}
“正常”控制器现在将扩展MY_控制器以利用此功能

有关更多详细信息,请参阅

此外,当您
load->vars()
时,它们仅对视图层可用,它不会像您试图访问的那样创建名为
$data
的全局变量。如果您这样做:

$this->load->vars(array('user' => '1'));
您可以在由
$this->load->view()加载的文件中访问它,如下所示:

echo $user;  // outputs "1"
见:

$this->load->vars($array) 此函数将关联数组作为输入并生成 使用PHP提取函数的变量。此函数生成 与使用
$this->load->view()
上面的函数。您可能希望使用此函数的原因 如果您想在 控制器的构造函数,并使其在任何 查看从任何函数加载的文件。您可以有多个呼叫到 这个功能。数据被缓存并合并到一个数组中,以便 转换为变量

我要说的是,作为一个经验丰富的Codeigniter用户,“global vars”类的概念有点不可靠,可能没有必要,尤其是当它已经很容易获取和设置配置项时。使用此方法,您肯定会遇到一些令人困惑的问题和变量名冲突(在每个请求上预加载大量视图变量)