2011-08-26 55 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