1

我在显示由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 中。

然而,我现在面临的挑战是如何在索引页面的“列表”中显示这些字段。当我使用表单域在视图或编辑操作中显示时,没关系,因为选择元素将再次使用。但是,如果我想以纯文本形式显示它,我应该如何“翻译”它?

我能想到的一件事是在模型中创建这些“转换”方法,但我认为在视图中调用模型方法在 MVC 中并不是一个好的做法。

任何想法?

4

1 回答 1

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在模型内部起作用。

注意:如果该方法也适用于单个记录数据数组,则必须更改该方法。

于 2013-01-17T20:29:08.547 回答