我最近一直在玩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)
组成希望你能提供帮助:)
答案 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'))