CakePHP-将选择文本设置为值

CakePHP-将选择文本设置为值,cakephp,select,Cakephp,Select,我最近一直在玩CakePHP,遇到了以下问题: 在使用form helper创建视图时,我一直在执行以下操作以输出一个选择 echo $this->Form->input('fee', array( 'empty' => '---', 'options' => array( __('Yes'), __('No')) )); 我准备好了字符串,以便为i18n做好准备,这就是为什么它们用_uu(

我最近一直在玩CakePHP,遇到了以下问题:

在使用form helper创建视图时,我一直在执行以下操作以输出一个选择

    echo $this->Form->input('fee', array(
        'empty' => '---',
        'options' => array(
        __('Yes'),
        __('No'))
    ));
我准备好了字符串,以便为i18n做好准备,这就是为什么它们用_uu(“”)声明的原因

因此,它可以完美地工作,并生成以下代码:

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

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


希望你能帮忙:)

我不会那样做!到目前为止,cake不支持开箱即用枚举。 但是有很多方法可以解决这个问题,其中一些方法通常比最初使用枚举要好得多

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

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

如果您确实需要两个以上的确定状态,请阅读 例如您可以通过坚持使用tinyint2字段轻松实现您的目标:

$this->Form->input('fee', array('options' => Model::fees()));
无论如何,要回答您的问题:如果确实必须在此处保存字符串,请确保它是键的一部分,或者在保存之前将其映射到控制器中

'options' => array(
    __('Yes') => __('Yes'),
    __('No') => __('No'))

谢谢你的回答。你是对的,我会考虑TyyIn解决方案:)。我对编程非常陌生,所以我还没有建立一个庞大的知识库,我非常感谢每一个提示。