CodeIgniter全局变量

时间:2010-03-26 22:15:48

标签: php codeigniter

我在所有观看$this->load->view('my_view', $data);

中使用 $ data

我还按照本指南Extending Core Controller

自动加载了一个控制器

但我希望将$ data全局化,因为在views中有一个侧栏对整个项目来说是常量,并显示通过自动加载控制器中的db获取的信息

目前我必须为每个人手动编写$ data ['todo']并从自动加载的模型获取信息。

谢谢。

4 个答案:

答案 0 :(得分:16)

1:使用以下内容在MY_Controller中创建application/libraries

class MY_Controller extends Controller {  
  var $data;      
  //constructor function              
}

2:将Controller替换为所有控制器文件中的MY_Controller,并使用$this->data加载视图

class Contact extends Controller { //to.. } 

class Contact extends MY_Controller { 
 $this->load->view('contact_view', $this->data);
}

这样您就可以在MY_Controller中执行适用于整个网站的默认功能,例如加载设置。

答案 1 :(得分:5)

我今天早些时候遇到了类似的问题。我发现使用常量更简单,而不是全局变量。您可以定义将从index.php文件加载的常量文件:

// Include additional constants
$defines_file = 'includes/defines.php';
if (file_exists($defines_file))
{
    require_once($defines_file);
} 

然后您可以将常量添加到defines.php文件中:

define(MY_CONSTANT,'my constant info');

通过这种方式,它们可以直接在整个系统的任何文件中使用:echo MY_CONSTANT;或者您可以将它们分配给变量。

我决定这种方式对我来说会更容易,因为我只需要一个位置去/当我需要更改常量时。

更多:http://codeigniter.com/forums/viewthread/56981/#280205

答案 2 :(得分:1)

我使用辅助函数来调用全局函数!

例如

function get_user($userid){
    $CI =& get_instance();

    $query = $CI->db->get_where('users', array('id' => $userid), 1, 0);
    foreach ($query->result() as $row){
        // Return a object with userdata!
        return $row;
    }
}

现在我可以随处访问我的用户数据..

答案 3 :(得分:-1)

我建议使用HMVC构建模块来生成此侧边栏视图,而不是将视图数据设为全局。 HMVC是一种编写部分视图的简洁方法。