Cakephp显示表单中选择元素设置的视图字段


Cakephp display view fields that is set by select elements in form

我有问题显示由FormHelper创建的选择元素设置的值。我已经在网上搜索了,但似乎无法找到答案。以下是场景:

我有一份问卷,里面有很多选项。在模型中,我将这些项目放入数组中,例如($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中不是一个好的做法。

任何想法?

我认为在你的模型中添加一个方法是可行的。这个怎么样:

// 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上工作。

注意:方法必须改变,如果它应该为一个单一的记录数据数组工作,以及