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

zy1mlcev  于 2023-02-08  发布在  PHP
关注(0)|答案(4)|浏览(174)

使用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.谢谢.

idfiyjo8

idfiyjo81#

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

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

使用FormHelper::radio时,如果值匹配,则只能将value设置为其中一个选项的default。这也会隐藏隐藏字段。

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

3npbholx2#

此外,您应该记住CakePHP不支持枚举(我相信这种情况是原因之一)
如果你的字段数据是真正的二进制(yes/no true/false enable/disabled等),那么为了CakePHP的约定,你应该只使用int(1)或tinyint(1)字段,然后在视图中将布尔值转换为yes/no等。
这样就不必担心创建自己的隐藏输入值和禁用生成的隐藏输入。
另一个选项是重写form-〉helper checkbox方法,该方法由form-〉input调用,以接受选项数组中的一个新键,该键将值设置为0 / false以外的值。

o2gm4chl

o2gm4chl3#

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

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

l2osamch4#

有了FormHelper::Radio,我就能做到这一点

echo $this->Form->radio(
    'done', 
    ['yes' => __('Yes'), 'no' => __('No')], 
    ['hiddenField' => false]
);

相关问题