sfWidgetFormInputCheckbox无法正常工作

时间:2012-08-27 10:21:01

标签: oracle symfony1 widget

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

这样做有一种优雅的方式,还是我应该手工检查?

1 个答案:

答案 0 :(得分:0)

问题来自我的表单处理。我的遗留代码没有渲染所有字段(例如:某个标记字段,由行为更新)。它是使用fromArray,然后保存。这只更新了fiels。

传统的symfony形式,给所有未渲染的fiels赋予null,以便为所需的验证做准备。

所以你需要自己检查并设置为0,当你使用fromArray然后保存。尽管如此,我发现表单>保存真的很愚蠢,因为您需要将无用的(在这种情况下)或机密数据发送到您的客户端才能使用它。