2012-02-24 128 views
3

我有一個非常簡單的形式與來自教義模型的一些字段。Symfony窗​​體不尊重集默認值

$this->widgetSchema['fields'] = new sfWidgetFormDoctrineChoice(array(
    'model'   => 'FieldModel', 
    'expanded'  => true, 
    'multiple'  => true,)); 

$this->validatorSchema['fields'] = new sfValidatorDoctrineChoice(array(
    'model' => 'FieldModel', 
    'multiple' => true,)); 

這些字段以複選框的形式呈現,我能夠檢查並正確保存。這個'fields'字段被轉換爲json結構並以文本形式保存到數據庫中。到現在爲止還挺好。

注意:字段'fields'作爲TEXT存儲在數據庫中,但用戶應該能夠從複選框列表中選擇值。

當我想要默認選中某些複選框時出現問題。

我試圖做的:

$this->setDefault('fields', array('key1','key2','key3')); 

其中「keyX」對應於數據庫中的主鍵(字符串)字段的實際值。

如果我做了

$this->getDefault('fields'); 

我回去正是我把以前。

但是,symfony不會輸出任何複選框。我甚至試圖刪除'擴展'和'多個'選項的選擇部件,所以我得到一個簡單的選擇框,並提供只有一個值作爲默認選定。

設置其他小部件(文本輸入,選擇等)的默認值。

Btw;場模型是國際化的。不知道這裏是否重要,因爲存儲/檢索工作如預期那樣。

另外;該表單通過include_partial()方法呈現爲另一個表單的一部分。這可以破壞什麼嗎?在「父」窗體類:

$this->embedRelation('TheRelationThatBugsMe'); 

然後在_form.php這個爲「父」:

include_partial('the_relation_that_bugs_me/form', array('form' => $form['TheRelationThatBugsMe'])); 

沒有人有一個想法,我可能出現了問題,或者至少可以給我一些指導,我應該從哪裏開始挖掘?

[UPDATE]

如果創建的形式「fields2」的新字段(即不存在作爲在數據庫中的字段),並使用完全相同的代碼來創建插件,驗證器並設置默認值,那麼默認值將被正確渲染。它如何不起作用設置映射到數據庫中列的字段的默認值?

回答

3

如果您在updateDefaultFromObject被調用sfDoctrineForm之前調用setDefault,那麼如果對象存在,則對象的值將覆蓋表單默認值。 updateDefaultsFromObject包含相關的邏輯。稍後您必須致電setDefault,或者重寫該方法。