2013-01-17 51 views
1

我有問題顯示由FormHelper創建的選擇元素設置的值。我搜查了互聯網,但似乎無法找到答案。這裏是場景:CakePHP顯示視圖字段,通過選擇表單中的元素設置

我有一個問卷形式,有很多選擇。在這個模型中,我把這些項目到一個數組,說($frequencyOptions)使用時和formhelper

$this->Form->input('frequency',array("options"=> $frequencyOptions)); 

目前,期權的價值是數組的索引,它看起來像:

<option value="">(choose one)</option> 
    <option value="0">Rare</option> 
    <option value="1">Frequent</option> 
    <option value="2">Moderate</option> 

中當然,我知道,如果我構建$frequencyOptions變量像

$frequencyOptions = array("Rare" => "Rare", ... 

時設置的鍵以及我就能值存儲在文本。

但是,由於其中一些選項非常長,我寧願將它們保存在數據庫中的INT中。

然而,我現在面臨的挑戰是如何在索引頁面的「列表」中顯示這些字段。當我使用表單域在視圖或編輯操作中顯示時,這是可以的,因爲select元素將再次使用。但是,如果我想以純文本顯示它,我應該如何「翻譯」它?

我能想到的一件事就是在模型中創建這些「轉換」方法,但我認爲在視圖中調用模型方法在MVC中並不是一個好習慣。

有什麼想法?

+0

你可以從控制器調用這些「轉換方法」,這對我來說很好嗎? –

回答

0

我想爲你的模型添加一個方法將是一條路。這個怎麼樣:

// In your Model class 

// Store the index-to-name map in the Model as well 
var $frequencyOptions = array(...); 

public function translateFrequency(&$data) { 
    foreach ($data as &$record) { 
     $index = $record['ModelName']['frequency']; 
     $record['ModelName']['frequency'] = $this->frequencyOptions[$index]; 
    } 
} 

// In your Controller action: 
$data = $this->ModelName->find(...); 
$this->ModelName->translateFrequency($data); 

,然後傳遞到索引頁面時,它應顯示人類可讀的值。如果喜歡,可以更改上述方法,以便在模型內的$this->data上工作。

注意:如果該方法也適用於單個記錄數據陣列,則該方法必須更改。

相關問題