2011-11-20 37 views
0

在Codeigniter中有定义动态全局变量的方法吗?我需要经常使用:在Codeigniter中定义全局(动态)变量

$this->session->userdata('user_id')

在我的代码,我真的不希望有这个打出来的所有时间。我已经在另一个项目做的是使用类似:

$this->mid = $this->session->userdata('user_id') 

在控制器的构造函数,使之成为在该控制器的每个方法访问,但后来我不得不重新定义它在所有其他的控制器构造。我知道我听起来很懒,但我只是想让最好的DRY代码成为可能。我知道你可以在config/config.php文件中指定静态变量,但这些变量是动态的 - 所以我认为你不能访问该文件中的$ this对象(或其他)。

有没有办法让这样一个会话变量全局?

+1

介绍全球变得更干燥就像砸你的车的窗户,以节省时间打开它们。但是既然你已经在使用CI了,我相信你可以坚持使用一些基类。 – Gordon

+0

是的,我找到了一个解决方案:在核心Controller.php的构造函数中定义它们,或者创建自己的MY_Controller并扩展基类。谢谢你的明目张胆的比喻。 – hohner

+1

请创建一个答案并将其标记为已接受,以便它不会显示在未答复的列表中。谢谢! – swatkins

回答

2

创建一个自定义控制器MY_Controller.php:

<?php 
    class MY_Controller extends Controller { 

     var user_id = ''; 

     function __construct() { 
      parent::__construct(); 

      $this->user_id = $this->session->userdata('user_id'); 
     } 
    } 
?> 

,并由您的控制器,扩展该控制器例如控制器的welcome.php:

<?php 
    class Welcome extends MY_Controller { 

     function __construct() { 
      parent::__construct(); 
     } 

     function index() { 
      var_dump($this->user_id); 
     } 
    } 
?> 

您可以在MY_Controller全局变量并在扩展定制控制器的每个控制器上使用它。