2011-11-18 44 views
5

我是Symfony窗​​體的新手,並試圖找出如何使用引用父對象的隱藏字段的窗體。例如,我有一個與聯繫人具有多對一關係的列表。當創建一個新的聯繫人時,他需要一個隱藏的字段,其中包含要添加聯繫人的列表的ID。Symfony2窗體 - 如何隱藏字段引用父對象

目前我正在嘗試在我的ContactType表單中嵌入名爲ListIdType的表單。 ListIdType窗體中唯一的字段是列表的ID。這很好,因爲我可以在一個空的聯繫人實體上設置列表,它會自動填充名爲contact[list][id](在ListIdType表單中定義)的表單中的元素。與此問題是,當我提交表單時,我得到一個錯誤,說明列表類中不存在元素「id」或methed「setId()」。

我的感覺是,我做錯了什麼,但我找不到任何文件指出我正確的方向。

+0

我沒有找到https://github.com/symfony/symfony/pull/1951。那是唯一的解決方案嗎?在我看來,應該有一個本地Symfony的方式來做到這一點。 – Icode4food

+2

與「數據變形金剛」交易的正確方式,請參閱http://symfony.com/doc/current/cookbook/form/data_transformers.html – KevinS

+0

如果幸運的話,HiddenEntityType將很快將它變成Symfony: https://github.com/symfony/symfony/issues/8293 – webDEVILopers

回答

6

我想出的解決方案是添加一個隱藏字段,property_path選項設置爲FALSE。這裏是ContactType::buildForm中的代碼:

$builder->add('list_id', 'hidden', array(
     'data' => $data->getList()->getId(), 
     'property_path' => FALSE, 
    )); 

然後我在我的控制器中處理該字段。

這工作,但不覺得像我最好的解決方案。如果有人能提出更好的方法,我仍然開放!

3

最近我發現了Gregwar的論壇包,它增加了entity_id表單類型。它會自動執行大部分所需的轉換,並可能正是您所需要的。

https://github.com/Gregwar/FormBundle

相關問題