Symfony始终将复选框保存为零

时间:2012-01-09 06:24:49

标签: php symfony1 checkbox boolean

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

您的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);
  }

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