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 作为值。我如何强制蛋糕将字段描述作为值

是的

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

希望你能帮忙:)

4

1 回答 1

1

我不会那样做的!截至目前 cake 不支持开箱即用的枚举。但是有很多选项可以解决它 - 其中一些通常比首先使用枚举要好得多。

就你而言,我想知道为什么你会在这里想要一个枚举?它显然是一个布尔值(两种状态: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'))
于 2013-02-24T19:07:16.423 回答