2012-03-06 70 views
0

我想保存一些全局变量以用于网站,例如当前用户ID,当前用户杠杆等。最好的地方在哪里,或者可能吗?CodeIgniter中的全局变量

将其设置为constants.php不起作用,因为“$ this”在此处不被识别。

主要的原因,我想这是因为我不喜欢使用会话(我考虑写串像$this->session->userdata('session_name')不那么实用,写东西像CURR_UID是更容易做到这一点,阅读也一样)

+3

呀完全。全球各地的总是更好。它的简单性比普通的面向对象原则更加实用,这些原则已经过多年和数年的战斗测试,并被该领域最聪明的头脑认可为最佳实践。 - ***叹息*** - – rdlowrey 2012-03-06 20:43:02

+1

您想要处理IS会话数据的数据。所以,即使你不喜欢会议,这将是处理这些数据的最佳方式。 – 2012-03-06 20:43:44

+0

会话甚至不能与全局变量相媲美。你在比较苹果和橙子 – zerkms 2012-03-06 20:45:12

回答

1

这是可能的,但它不是Codeigniter的设计方式。会议确实是这种事情的地方(即从一个页面浏览到下一个浏览页面的内容),但如果您愿意,您可以为了美观而选择wrap the session calls up in a library。事情是这样的:

// in libraries/User.php 
class User { 

    protected $ci; 

    public function __construct() { 
    $this->ci = &get_instance(); 
    } 

    public function id() { 
    return $this->ci->session->userdata('user_id'); 
    } 

    // etc, etc. 
} 

一旦你已经写了几个帮手像id(),你可以用它们来访问其他地方在您的应用程序中的相关变量:

$this->load->library('user'); 
echo 'Current user ID is: ' . $this->user->id(); 
+0

谢谢@rjz毕竟,我不能只是定义它,我必须使用类和功能...太糟糕了,但仍然更好,然后$ this-> ci-> session-> userdata ('用户名'); – GabrielCol 2012-03-06 20:56:58

+2

你可以定义它,但是(正如你可以从上面的评论中猜到的那样)这些东西通常会在灾难中结束:-) – rjz 2012-03-06 21:03:11

+0

在函数id()中,return缺少:)谢谢你的帮助! – GabrielCol 2012-03-06 21:12:54

1

在这种情况下你可以做的是创建一个class My_Controller extends CI_Controller。在实际加载任何特定控制器功能之前,对所需的所有功能进行分类。

然后您创建的任何后续课程都可以这样做:class Whatever extends My_Controller

编辑:我忘了提及你应该把My_Controller类放在Application> Core文件夹中。