CakePHP表单助手-更改复选框/单选框的隐藏输入值

CakePHP表单助手-更改复选框/单选框的隐藏输入值,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,使用CakePHP的表单助手生成复选框非常简单;要使用文档中的示例,请执行以下操作: echo $this->Form->checkbox('done',array('value' => 555)); 这将生成以下HTML: <input type="hidden" name="data[User][done]" value="0" id="UserDone_" /> <input type="checkbox" name="data[User][d

使用CakePHP的表单助手生成复选框非常简单;要使用文档中的示例,请执行以下操作:

    echo $this->Form->checkbox('done',array('value' => 555));
这将生成以下HTML:

<input type="hidden" name="data[User][done]" value="0" id="UserDone_" />
<input type="checkbox" name="data[User][done]" value="555" id="UserDone" />

这一切都很好,隐藏字段用于强制提交“完成”字段的值,即使该框保持未选中状态

现在,为了便于讨论,假设该字段的数据库定义为
ENUM('yes','no')
。当然,我可以轻松地将复选框的值更改为“是”。但是,如果未选中,则从隐藏元素提交值“0”。这不会从mysql产生错误或警告,因为0始终是枚举字段的合法值;它显示为空字符串

我可以将CakePHP生成的隐藏字段的值更改为“否”,还是需要抑制自动生成并自己创建隐藏字段?(随着复选框数量的增加而增加的烦恼。)

我相信这些都适用于单选按钮组,至少如果它们没有默认选择的话

我使用的是CakePHP1.3。谢谢。

不幸的是,它允许您禁用隐藏元素,但不能选择其值,因此您需要这样做并自己创建隐藏字段。例如:

<?php echo $this->Form->hidden('done',array('value'=>'no'))?>
<?php echo $this->Form->checkbox('done',array('value'=>'yes','hiddenField'=>false))?>

另外,您应该记住CakePHP不支持枚举(我确信这种情况是一个原因)

如果字段数据是真正的二进制数据(yes/no true/false启用/禁用等),那么出于CakePHP约定,您应该只使用int(1)或tinyint(1)字段,然后在视图中将布尔值转换为yes/no等

这样,您就不必担心创建自己的隐藏输入值和禁用生成的隐藏输入


另一个选项是重写form->input调用的form->helper复选框方法,以接受选项数组中的一个新键,该键将值设置为0/false以外的值。

使用
FormHelper::checkbox
,可以使用hiddenField设置默认值

<?php echo $this->Form->checkbox('done', array('value'=>'yes', 'hiddenField'=>'no');?>

啊,我担心会归结到那种事情上。对一个愚蠢的问题来说+1是个很好的答案。这在2.0文档中很清楚,但在1.3文档中没有提到(其中只提到将其设置为
false
以忽略隐藏字段)。我还没有测试它,所以很难说升级是在代码中还是在文档中。
<?php echo $this->Form->radio('done', array('yes' => __('Yes')), 'no' => __('No'), array('value'=>'no');?>