我想通过创建自己的库和配置文件在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
似乎尚未定义会话功能。我怎样才能让它发挥作用?我错过了什么?任何帮助将不胜感激。
答案 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用户,“全局变量”类的概念有点不太可能并且可能是不必要的,特别是当它已经很容易获取并设置配置项时。您肯定会遇到一些令人困惑的问题和变量名称与此方法冲突(在每个请求上预加载大量视图变量)。