CakePHP - 将选择文本设置为值

时间:2013-02-24 18:59:52

标签: cakephp select

我最近一直在玩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>

然而,蛋糕确实 - 通常 - 将ID作为值。我如何强制蛋糕将字段描述视为值

表“游戏”中的“费用”字段由varchar(100)

组成

希望你能提供帮助:)

1 个答案:

答案 0 :(得分:1)

我不会那样做!截至目前,蛋糕不支持enum开箱即用。 但是有很多选择可以解决它 - 其中一些通常比首先使用枚举更好。

在你的情况下,我想知道为什么你会想要这里的枚举?它显然是一个布尔值(两个状态:0或1,是或否)。所以我总是只使用tinyint1存储这个布尔值。

您应该以低成本(没有与整个字符串相比)在数据库中存储基本信息(0或1)和低回归错误,并且只在输出上翻译/解释它(例如在您的视图中)

如果您确实需要两个以上的确定状态,请阅读 例如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'))