2013-01-03 27 views
0

我目前在我的應用程序中有一個選項供用戶從列表中選擇最喜歡的項目。表單元素是Entity類型,並顯示對象列表。用戶可以選擇其中的一些作爲他們的個人喜好。如何使Symfony2實體formtype顯示類型爲A的實體,但將它們保存爲類型B?

但是,雖然列表必須顯示Items,但實際上需要存儲的實際上是FavoritedItem(其中包含關於用戶何時/如何收看其Item的額外信息)。

我不知道如何轉換實體類型,以便用戶可以從一個項目實體列表中選擇,但表單存儲連接到該用戶的FavoritedItems。

+0

你的幾個實體設置?這兩者之間的關係是什麼? – Squazic

回答

1

我猜你的實體與FavoritedItem的關係,當你創建你的形式,並不包括那場,而是一個空場,以包含數據選擇的用戶:

$builder->add('favs', null, array('property_path' => false, 'type'='entity'.....)); 

找到這一行:

if ($form->isValid()) { 
     // perform some action, such as saving the task to the database 

     return $this->redirect($this->generateUrl('task_success')); 
    } 

對於您的每個項目,請在您的實體上設置相應的FavoritedItem。它看起來是這樣的:

$favorites = $form->get('favs')->getData(); 

foreach($favorites as $f){ 
    $FavItem = new FavoritedItem($f); 
    $yourEntity->addFavorite($FavItem); 
} 
+0

謝謝。有什麼辦法來處理表單中的所有這些?由於可重用性,我寧願不將邏輯移動到控制器。 – Erik

+1

如果您想要以多種形式使用相同的字段類型,請創建您自己的字段類型(http://symfony.com/doc/master/cookbook/form/create_custom_field_type.html)。如果您想使用現在使用的相同字段類型,請創建一個自定義轉換器(http://symfony.com/doc/current/cookbook/form/data_transformers.html)。您可能希望看到以下問題:http:/ /stackoverflow.com/questions/8107179/create-a-form-as-a-service-in-symfony2 – Xocoatzin

相關問題