【问题标题】:CakePHP form helper - change value of hidden input for checkbox/radioCakePHP 表单助手 - 更改复选框/收音机的隐藏输入值
【发布时间】:2011-03-18 15:05:51
【问题描述】:

使用 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 生成的隐藏字段的值(改为“否”),还是我需要禁止自动生成并自己创建隐藏字段? (随着复选框的数量而增加的烦恼。)

我相信这一切也适用于单选按钮组——至少在它们没有默认选择的情况下。

我正在使用 CakePHP 1.3。谢谢。

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

    使用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');?>
    

    【讨论】:

    • +1 可以很好地回答一个 oooold 问题。这在 2.0 文档中很清楚,但在 1.3 文档中没有提到(它只提到将其设置为 false 以省略隐藏字段)。我还没有测试过,所以很难说升级是在代码中还是在文档中。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 啊,我担心它会归结为那种事情。啊,好吧。
      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多