Symfony总是将复选框保存为零


Symfony always saves checkboxes as zero

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

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

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

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

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))
));

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

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

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

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

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

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

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

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

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

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

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