2011-03-18 76 views
2

使用CakePHP的表单助手生成复选框很容易;使用从文档的例子: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总是enum字段的合法值;它显示为空字符串。

我可以更改隐藏字段的值CakePHP的生成(为“否”),或者我需要打压自动生成并创建隐藏字段自己? (与复选框的数量一起增长的烦恼。)

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

我正在使用CakePHP 1.3。谢谢。

回答

5

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

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

那么你不必担心创建自己隐藏的输入值和禁用生成隐藏的输入。

另一种选择是,以覆盖该得到由形式 - >输入的被叫接受选项数组中的一个新的关键是将值设置为大于0 /假以外的东西的形式 - >帮助复选框方法。

+0

+1非常丰富,谢谢。 – eaj 2011-03-18 17:15:27

+0

非常丰富的 – Vineet 2015-11-24 10:35:57

3

不幸的是,FormHelper::checkbox允许您禁用隐藏的元素,但不要选择它的价值,所以你需要这样做,创建隐藏字段自己。例如:

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

啊,我担心它会下降到这样的事情。呃,好吧。 – eaj 2011-03-18 17:14:48

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');?> 
+0

对于一个问题的一个很好的答案+1。这在2.0文档中很清楚,但在1.3文档中没有提及(它只提到将其设置为“false”以省略隐藏字段)。我还没有测试过,所以很难说升级是在代码还是在文档中。 – eaj 2012-11-06 17:45:20

相关问题