1

によって作成されたselect要素によって設定された値の表示に問題があります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要素が再び使用されるので問題ありません。ただし、プレーンテキストで表示したい場合は、どのように「翻訳」する必要がありますか?

私が考えることができることの1つは、モデルでこれらの「変換」メソッドを作成することですが、ビューでモデルメソッドを呼び出すことは、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 に答える