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