2013-05-02 102 views
0

我有一個問題。我有一個數據庫表設置(ID,名稱)。 如果我從數據庫中讀取它們cakePHP從每個模型和控制器獲取變量

$settings = $this->Setting->find('list'); 

我怎麼能做到這一點在AppController的或類似的東西從每個控制器和模型的訪問?

希望有人能幫助我。

感謝

回答

0

說明:

我會假設你正在尋找的東西像下面(當然你要調整它每自己的應用程序,但 - 它的想法)。

在該應用控制器,它

  • 通過每個
  • 重複發現從表中的設置,並把每一個爲 「配置」 可變

代碼:

/** 
* Read settings from DB and populate them in constants 
*/ 
function fetchSettings(){ 
    $this->loadModel('Setting'); 
    $settings = $this->Setting->findAll(); 

    foreach($settings as $settingsData) { 
     $value = $settingsData['Setting']['default_value']; 

     //note: can't check for !empty because some values are 0 (zero) 
     if(isset($settingsData['Setting']['value']) 
      && $settingsData['Setting']['value'] !== null 
      && $settingsData['Setting']['value'] !== '') { 
      $value = $settingsData['Setting']['value']; 
     } 
     Configure::write($settingsData['Setting']['key'], $value); 
    } 
} 

然後,您可以訪問它們Configure::read('myVar');

來自CakePHP書籍的關於配置變量的警告。 (我想他們沒事在這種情況下使用,但 - 這是要牢記):

CakePHP的配置類可用於存儲和檢索應用程序 或運行特定的值。請注意,此類允許您存儲任何內容,然後將其用於您的 代碼的任何其他部分:肯定會破壞MVC模式的誘惑CakePHP設計爲 。配置類的主要目標是保持可在多個對象之間共享的集中變量 。請記住嘗試通過 「約定優於配置」來生活,並且不會最終破壞我們已經設置的MVC 結構。