0

我对 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 应该能够告诉自己“嘿,我在这里添加了一个复选框”。

有没有一种优雅的方式来做到这一点,还是我应该手动检查?

4

1 回答 1

0

问题来自我的表单处理。我的旧代码没有呈现所有字段(例如:某些标记字段,由行为更新)。它正在使用 fromArray,然后保存。这仅更新渲染的字段。

传统的 symfony 形式,为所有未渲染的字段赋予 null 以便 chcuk 进行所需的验证。

所以你需要自己检查并设置为0,当你使用fromArray然后保存。不过,我发现 form->save 真的很愚蠢,因为您需要向您的客户发送无用(在这种情况下)或机密数据才能使用它。

于 2012-10-23T15:00:03.790 回答