我有问题显示由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
上工作。
注意:方法必须改变,如果它应该为一个单一的记录数据数组工作,以及