我的sfWidgetFormInputCheckbox有问题。如果取消选中该复选框,则不会在数据库中保存false。
在我的schame中,我的字段是一个布尔值,我在显示的值中没有错误。
像这样设置默认值:$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)。
EDIT2:
我有两条线索需要补充。如果该字段是schema.xml中的整数,则两个值都有效,但是我们在显示的值上显示了一个问题(复选框选中了q值为0的值)。在这里,他的字段是布尔值。
setter接收两种值,复选框选中'on',不选时为true。我试图在表单中将默认值设置为false,并覆盖他的setter。两者都不起作用。
我的意思是setter工作,但由于一个未知的原因,基本的seer在错误的值之后被调用。
EDIT3:
好的,我理解部分问题。取消选中该复选框时,不会调用setter。我以为是因为,m代码显示了var_dump()。这是因为后来我在归档目的中复制了该对象的旧版本。
但是symfony应该检测到该字段已经被渲染而它没有。我不知道为什么。我知道为什么在HTML中,但显然symfony应该能够告诉自己“嘿,我在这里添加一个复选框”。
这样做有一种优雅的方式,还是我应该手工检查?
答案 0 :(得分:0)
问题来自我的表单处理。我的遗留代码没有渲染所有字段(例如:某个标记字段,由行为更新)。它是使用fromArray,然后保存。这只更新了fiels。
传统的symfony形式,给所有未渲染的fiels赋予null,以便为所需的验证做准备。
所以你需要自己检查并设置为0,当你使用fromArray然后保存。尽管如此,我发现表单>保存真的很愚蠢,因为您需要将无用的(在这种情况下)或机密数据发送到您的客户端才能使用它。