在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))
));
答案 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);
}
如果你没有看到“有效”键布尔值,则会出现验证过程错误,如果它在这里,你有模型问题(你是否覆盖了保存方法?)。