2016-09-28 62 views
1

我是Codeigniter的新手。 我在我的數據庫中有一個名爲'sysConfig'的表,其中包含標題,貨幣單位,許可證密鑰和...等列。從全局變量的數據庫獲取用戶配置

我想把這個表記錄(它只有一條記錄)的第一行寫到一個名爲'$ Config'的全局變量中,它可以在所有視圖中使用(如果它可能在模型和控制器中可用)。

編輯: 我可以從數據庫中選擇任何數據,我沒有任何問題。我想在名爲$ Config的變量中選擇表sysConfig上的數據,並直接像這樣訪問它<?php echo $Config['Title']; ?><?php echo $Config -> Title; ?>

+1

在提出任何問題之前請閱讀文檔。例如,你可以通過這個http://www.codeigniter.com/userguide3/database/results.html –

+0

@ sayantan-das我可以從數據庫中選擇任何數據,我沒有任何問題。我想在名爲$ Config的變量中選擇表sysConfig上的數據並直接訪問它。 – 56356356356

+0

然後,你可以添加一個幫助文件,並在幫助器中寫入一個函數,如'getConfig('config_name_here')',它將檢索請求的配置值。現在,如果你自動加載你的自定義幫助器,該幫助器中的所有功能都可用在整個項目中。你可以像訪問它一樣,<?= getConfig('config_name')?> –

回答

0

如果這些是系統配置項目,最好的方法是將它們加載到您自己的配置文件中。

創建您自己的配置文件。手動加載或自動加載。在它

$this->config->load('filename'); 

Access項目中像這樣

$this->config->item('item_name'); 

您也可以設置dynamicallly使用這個配置項:

$this->config->set_item('item_name', 'item_value'); 

您可以在文檔這裏讀到它:http://www.codeigniter.com/user_guide/libraries/config.html

或者,如果這是基於用戶的,則將信息收集到c urrent會話和訪問。雖然訪問模型或庫中的會話變量不是一個好主意。您應該將所需的項目作爲函數參數傳遞。

+0

感謝您的回覆。我如何從數據庫加載這些項目?因爲每個用戶都有自己的設置,所以我不能將它們保存在文件中。 – 56356356356

+0

對用戶進行身份驗證後,您可以將其設置爲會話變量,只要會話保持不變,數據就可以訪問。你可以在登錄時做到這一點,例如$ _SESSION ['license'] = $ license,$ _SESSION ['something_else'] = $ something_else等。我建議你使用DB來存儲會話。一旦存儲,就可以隨時直接訪問會話變量$ _SESSION ['license']。 – PaulD

+0

個人而言,我將在授權過程(該用戶已登錄)內設置一個庫調用,以獲取user_id,然後通過user_id檢查表以獲取許可等,然後將該數據返回給控制器。然後控制器將所需的任何信息(如果有的話)作爲參數發送給模型或庫。我不會在模型本身內的會話或其他地方檢查這些變量。這樣,如果你的系統發生變化,你只需要在一個地方改變一件事情,而不是在多個地方改變多個功能。 – PaulD

0

一種方法是將屬性添加到任何控制器,將需要數據的sysConfig。變量的名稱不應該是$ config,因爲CI已經使用該符號 - 它由Config類定義和設置。所以對於這個答案我會用$sysConfig

class Some_controller extends CI_Controller 
{ 
    protected $sysConfig; //class property with scope to this controller 

    public function __construct() 
    { 
    parent :: __construct(); 
    $this->load->model('sysConfig_model'); 
    } 

sysConfig_model(未顯示)管理您似乎已建立的表格。由於您沒有向我們展示任何代碼,因此我正在爲該模型編寫函數。模型功能get($id)根據$id檢索所需的「用戶」,並返回數組中的數據。 ($id的設定值沒有顯示。)

控制器可以按照需要通過$this->sysConfig使用該屬性,就像在這個公認的微不足道的控制器功能中一樣。

類定義繼續...

public function format_title() 
    { 
    if(isset($this->sysConfig){ 
     $this->sysConfig['suckup'] = "the most highly regarded " 
     . $this->sysConfig['title'] 
     . " in the world visit our site!"; 
    } 
    } 

其實對於$this->sysConfig分配一個值發生在這個代碼下位。在此示例中,控制器的index()函數可以接收一個參數,該參數是我們想要從數據庫中獲取的用戶的「ID」。

public function index($id = NULL) 
    { 
    //assign data to the class property $sysConfig from the model 
    $this->sysConfig = $this->sysConfig_model->get($id); 

該屬性可以很容易地傳遞給視圖。首先我們做一些吸吮。

 $this->format_title(); 
    $data['userStuff'] = $this->sysConfig; 
    $this->load->view('some_view', $data); 
    } //end of index() 

} //end of class Some_controller 

some_view.php

<div> 
    <h4>Welcome <?php echo $userStuff['firstName']. " " . $userStuff['lastName']; ?></h4> 
    <p>I cannot say how swell it is to have <?php echo $userStuff['suckup']; ?></p> 
</div> 

的 「全球性」 的想法實在是違背OOP方法在PHP - 或任何其他OOP語言。