2011-11-20 28 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全局變量並在擴展定製控制器的每個控制器上使用它。