2011-08-26 35 views
1

后显示旧值我有很多的复选框一个symfony的形式:Symfony的形式:节能

$this->form = new SocialSettingsForm($user); 

    if ($request->isMethod(sfRequest::POST)) { 
     $this->form->bind($request->getParameter('social')); 
     if ($this->form->isValid()) { 
     $this->form->save(); 
     $this->success = true; 
     } 
    } 

的问题是:保存表单后,复选框古怪

行为如果用户检查一个,它会在保存后出现检查(正常行为) 但是,如果用户未选中一个,它仍然会在保存后出现检查。

我做了一个var_dump的表单值,unchecked复选框有一个NULL值,所以我不知道为什么他们仍然检查。

感谢您的帮助。

+0

这似乎是一个symfony错误:http://www.devexp.eu/2009/04/23/sfwidgetforminputcheckbox-unchecked-bug/ – Intrepidd

+0

事实证明,symfony不会在绑定时重置复选框的“checked”属性,所以一个复选框将永远不会被视为未经检查绑定 – Intrepidd

回答

1

如果您使用布尔/整数字段保存复选框值,请为您的复选框使用sfValidatorBoolean。它还将输入值转换为有效的布尔值。所以null将被转换为0并将被保存在数据库中。

更新与解决方法

在旧版本的这个地方不工作,你可以添加隐藏的输入具有相同名称的复选框,并值为0,则复选框前。如果未勾选复选框,则会发送隐藏的输入值,否则将发送复选框值。

+0

没有工作... – Intrepidd

+0

你可以发布更新后的表单,因为sfValidatorBoolean是做到这一点的方式(我在StackOverflow上发现了3个关于复选框的更多问题,相同的答案......我也在使用它)。另外指定symfony版本,以防万一:) –

+0

那么这里是︰https://gist.github.com/a3fe12c22b17735fbb7f我想我只是做错了什么。 – Intrepidd