使用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" />
这一切都很好,隐藏字段用于强制提交"done"字段的值,即使该框保持未选中状态。
现在,为了便于讨论,我们假设这个字段的数据库定义是ENUM('yes','no')
,当然我可以很容易地将复选框的值改为"yes",但是,如果不选中它,则从隐藏元素提交值"0",这不会从mysql中产生错误或警告,因为0对于枚举字段总是合法的值;它将显示为空字符串。
我可以更改CakePHP生成的隐藏字段的值(改为"no")吗?或者我需要抑制自动生成并自己创建隐藏字段吗?(随着复选框的数量增加,这种烦恼也会增加。
我相信这也适用于单选按钮组至少在它们没有默认选择的情况下。
我用的是CakePHP 1.3.谢谢.
4条答案
按热度按时间idfiyjo81#
对于
FormHelper::checkbox
,可以使用hiddenField设置默认值。使用
FormHelper::radio
时,如果值匹配,则只能将value设置为其中一个选项的default。这也会隐藏隐藏字段。3npbholx2#
此外,您应该记住CakePHP不支持枚举(我相信这种情况是原因之一)
如果你的字段数据是真正的二进制(yes/no true/false enable/disabled等),那么为了CakePHP的约定,你应该只使用int(1)或tinyint(1)字段,然后在视图中将布尔值转换为yes/no等。
这样就不必担心创建自己的隐藏输入值和禁用生成的隐藏输入。
另一个选项是重写form-〉helper checkbox方法,该方法由form-〉input调用,以接受选项数组中的一个新键,该键将值设置为0 / false以外的值。
o2gm4chl3#
不幸的是,
FormHelper::checkbox
允许您禁用隐藏元素,但不允许您选择它的值,因此您需要自己创建隐藏字段。例如:l2osamch4#
有了FormHelper::Radio,我就能做到这一点