2010-05-05 22 views
1

在symfony 1.4中使用Doctrine我有幾個定義的布爾列(在mySQL中存儲爲tinyint)。即使返回的值爲「0」,複選框小部件也始終呈現爲檢查狀態。它似乎與this ticket有關。symfony:布爾列不呈現複選框小部件作爲檢查

這是常見問題嗎?有沒有解決方法?

我可以得到它通過改變線路70 sfWidgetFormInputCheckbox到工作:

if (null !== $value && $value !== false && $value !== 0) 

但我寧願沒有改變symfony核心文件。

+0

謝謝你提出這個問題。我可以證實,截至2011年11月,這仍然是一個問題。看起來他們可能已經在1.4.15版本中修復了它,但事實並非如此。 http://trac.symfony-project.org/ticket/3996 – 2011-11-09 01:37:06

回答

0

Symfony的未解決的bug,請參閱http://www.devexp.eu/2009/04/23/sfwidgetforminputcheckbox-unchecked-bug/

您的數據庫爲未選中的方框返回0,但Symfony的呈現爲檢查。

您可以通過編輯的symfony/lib中/小工具/ sfwidgetforminputcheckbox.class,行70(1.4.6版本),改變自己的打補丁:

if (null !== $value && $value !== false)

if (null !== $value && $value !== false && $value != 0)

+0

對於此解決方案的任何未來讀者,應預先警告,不應該更改核心類的行爲,否則當您升級時,您將失去更改,轉到生產,並想知道爲什麼它不像以前那樣行事。 – 2011-11-09 01:35:37

0

不確定在什麼情況下您看到問題。我可以得到以下工作正常:

$database_field = '1;0;1;0;1;0;1'; 
$checked = explode(';', $database_field); 
$this->form->getWidget('a_set_of_checkboxes')->setDefault($checked); 

...與1的複選框得到檢查,0不是。

我使用「sfWidgetFormChoice」小部件,其屬性爲「multiple:true」和「expanded:true」,因此它們不是單獨的複選框小部件,而是包含複選框/值數組的單個小部件。

+0

我的窗口小部件類是sfWidgetFormInputCheckbox,因爲它只是一個字段。 – gruner 2010-05-05 23:15:10

2

在不更改Symfony類的情況下解決此錯誤的另一個竅門是將數據庫中字段的默認值設置爲0(未選中):

chk_field: { type: boolean, default: 0 } 

而在集的Form.class小部件如下:

$this->setDefault('chk_field', $this->getOption('default')); 

這應該在你的形式來顯示「chk_field」字段作爲「未選中」

+2

我將其更改爲默認值:null,並且沒有使用setDefault選項。 – 2011-11-09 01:34:52