CodeIgniter中的全局变量无法正常工作

时间:2011-09-20 19:53:56

标签: codeigniter variables global

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

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

似乎尚未定义会话功能。我怎样才能让它发挥作用?我错过了什么?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

您无法在session文件中使用config库。

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

答案 1 :(得分:3)

必须加载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_Controller以利用此功能。

有关详细信息,请参阅:http://codeigniter.com/user_guide/general/core_classes.html

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

$this->load->vars(array('user' => '1'));

您可以在$this->load->view()加载的文件中访问它,如下所示:

echo $user;  // outputs "1"

请参阅:http://codeigniter.com/user_guide/libraries/loader.html

  

$这 - >负载>瓦尔($阵列)

     

此函数将关联数组作为输入并生成   变量使用PHP提取函数。这个功能产生了   与使用$this->load->view()的第二个参数相同的结果   以上功能。您可能想要使用此功能的原因   如果你想在中设置一些全局变量,那就是独立的   你的控制器的构造函数,并让它们可用于任何   从任何功能加载的查看文件。你可以有多个电话   这个功能。数据被缓存并合并到一个数组中   转换为变量。

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