我对 sfWidgetFormInputCheckbox 有疑问。未选中复选框时,它不会在数据库中保存 false。
在我的计划中,我的字段是一个布尔值,并且我在显示的值中没有错误。
像这样设置默认值:$this->setDefault('status', false);
也不行。
我的小部件:
$this->widgetSchema['SUSPENSION_TEMP'] = new sfWidgetFormInputCheckbox();
$this->validatorSchema['SUSPENSION_TEMP'] = new sfValidatorBoolean(array('required' => false));
默认:
$this->setDefault('SUSPENSION_TEMP', false);
有任何想法吗 ?
编辑:
选中复选框时保存 1。并且在取消选中并保存时不要更改数据库值。因此,一旦您检查过一次,数据库中的值始终为 1(我的代码为 true)。
编辑2:
我有两个线索要补充。如果该字段是 schema.xml 中的整数,则两个值都有效,但是我们在显示的值上遇到了问题(复选框选中了 qih 值)。在这里,he 字段是一个布尔值。
setter 接收两种值,复选框被选中时为“on”,未选中时为 true。我试图在表单中将默认值设置为 false,并覆盖他的设置器。两者都不起作用。
我的意思是 setter 的工作,但是由于未知的原因,基本的 seer 会在错误的值之后被调用。
编辑3:
好的,我理解部分问题。未选中复选框时,不会调用 setter。我以为是因为,m 代码显示了一个 var_dump()。这是因为后来我出于存档目的复制了该对象的旧版本。
但是 symfony 应该检测到该字段已经被渲染,但它没有。我不知道为什么。我知道为什么在 html 中,但显然 symfony 应该能够告诉自己“嘿,我在这里添加了一个复选框”。
有没有一种优雅的方式来做到这一点,还是我应该手动检查?