显示由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中不是一个好习惯。
有什么想法吗?
答案 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
。
注意:如果该方法适用于单个记录数据数组,则必须更改该方法。