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

时间:2011-03-18 15:05:51

标签: 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][done]" value="555" id="UserDone" />

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

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

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

我相信这一切都适用于单选按钮组 - 至少如果它们没有默认选择。

我正在使用CakePHP 1.3。感谢。

3 个答案:

答案 0 :(得分:5)

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

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

然后您不必担心创建自己的隐藏输入值并禁用生成的隐藏输入。

另一种选择是覆盖form-&gt; helper复选框方法,该方法由form-&gt;输入调用,以接受options数组中的新键,该键将值设置为0 / false以外的值。

答案 1 :(得分:5)

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

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

使用FormHelper::radio,如果值匹配,则只能将值设置为默认值之一。这也将抑制隐藏字段。

<?php echo $this->Form->radio('done', array('yes' => __('Yes')), 'no' => __('No'), array('value'=>'no');?>

答案 2 :(得分:3)

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

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