【问题标题】:Symfony always saves checkboxes as zeroSymfony 总是将复选框保存为零
【发布时间】:2012-01-09 06:24:48
【问题描述】:

在 Symfony 1.4.11 上,我有一个由 HTML 复选框在表单上设置的布尔字段。当值为 0(未选中)时,复选框的 HTML 为

<input type="checkbox" value="" name="gift_type[valid]">

当我尝试保存时,它总是保存为零,我假设因为输入没有价值。

我用于复选框的代码是由 symfony 管理生成器生成的,所以我认为它可以“开箱即用”。如果我取消选中一个真值,那么它会按预期工作。

schema.yml

GiftType:
  columns:
    valid: { type: boolean, notnull: true, default: true }

BaseGiftTypeForm.class.php

$this->setWidgets(array(
    'valid' => new sfWidgetFormInputCheckbox()
));
$this->setValidators(array(
    'valid' => new sfValidatorBoolean(array('required' => false))
));

【问题讨论】:

    标签: php symfony1 checkbox boolean


    【解决方案1】:

    您的 HTML 复选框看起来很有趣, 你确定它是由 symfony 生成的吗? (即缺少 id)

    <input type="checkbox" name="gift_type[valid]" checked="checked" id="gift_type_valid" />
    

    反正你显示的所有代码都可以,不需要改变模式类型! (平@richrosa)。 sfValidatorBoolean 返回一个布尔值,然后将其传递给对象,然后保存对象。你必须调试你的模型。开箱即用,Doctrine Admin Generator 中的布尔字段可以正常工作。

    您可以在 GiftTypeForm 类中添加此代码以帮助调试:

      protected function doUpdateObject($values)
      {
        var_dump($values);die();
        $this->getObject()->fromArray($values);
      }
    

    如果您没有看到“valid”键布尔值,则存在验证过程错误,如果在这里,则说明您有模型问题(您是否覆盖了保存方法?)。

    【讨论】:

    • 看起来 sfWidgetFormInputCheckbox 已被 /lib/vender/symfony/widget 中的同名文件覆盖,其渲染方法输出 $format = &lt;&lt;&lt;FORMAT &lt;ul class="inputs-list"&gt; &lt;li&gt; &lt;label&gt; &lt;input type="checkbox" name="%name%" value="%value%"%attributes%/&gt; &lt;span&gt;%label%&lt;/span&gt; &lt;/label&gt; &lt;/li&gt; &lt;/ul&gt; FORMAT; 我删除了有问题的代码,它现在输出ID 并按预期工作。不确定这段代码来自哪里(我不是原始开发人员),但我认为这应该可以解决我的问题。
    【解决方案2】:

    我不知道 Symfony 是如何工作的。在普通的 PHP/HTML 中,复选框的值与是否选中无关。如果一个复选框被选中,它的值将在表单中提交;不勾选则不提交。

    【讨论】:

      【解决方案3】:

      尝试将您的数据类型更改为 tinyint。

      valid: { phpName: Valid, type: TINYINT, size: '4', required: false }
      

      这是一个带有默认值和标签的复选框。

      $this->setWidgets(array(
      'valid' => new sfWidgetFormInputCheckbox(array('label'=>'My Label') , array('value' => '1'));
      

      【讨论】:

        猜你喜欢
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        • 2011-09-29
        相关资源
        最近更新 更多