0

私は最近CakePHPをいじっていて、次の問題に遭遇しました:

フォームヘルパーを使用してビューを作成している間、私は選択を出力するために次のことを行ってきました

    echo $this->Form->input('fee', array(
        'empty' => '---',
        'options' => array(
        __('Yes'),
        __('No'))
    ));

文字列を i18n に対応できるように準備したので、__(' ') で宣言されています。

したがって、それは完全に機能し、次のコードを生成します。

<div class="input select">
<label for="GameFee">Fee</label>
<select name="data[Game][fee]" id="GameFee">
<option value="">---</option>
<option value="0">Yes</option>
<option value="1">No</option>
</select>
</div>

それでも Cake は - 通常どおり - ID を値として受け取ります。ケーキにフィールドの説明を次のような値として強制するにはどうすればよいですか

はい

テーブル「games」内の「fee」フィールドは、varchar(100) で構成されます

あなたが助けてくれることを願っています:)

4

1 に答える 1

1

私はそれをしません!現在のところ、cakeはそのままの列挙型をサポートしていません。しかし、それを回避するためのオプションはたくさんあります-そしてそれらのいくつかは通常、最初に列挙型を使用するよりもはるかに優れています。

あなたの場合、なぜここに列挙型が必要なのだろうか?その明らかにブール値(2つの状態:0または1、yesまたはno)。したがって、私は常にtinyint1を使用してこのブール値を格納します。

ここ(0または1)の基本情報は、低コスト(文字列全体と比較して何もありません)および低回帰エラーでデータベースに保存し、出力時にのみ変換/解釈する必要があります(たとえば、ビューで)。

本当に3つ以上の明確な状態が必要な場合は、 たとえばhttp://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/をお読みください。ここでtinyint2フィールドに固執することで、簡単に目的を達成できます。

$this->Form->input('fee', array('options' => Model::fees()));

とにかく、あなたの質問に答えるために:本当にここに文字列を保存する必要がある場合は、保存する前に、それがキーの一部であることを確認するか、コントローラーで文字列にマップしてください。

'options' => array(
    __('Yes') => __('Yes'),
    __('No') => __('No'))
于 2013-02-24T19:07:16.423 に答える