2012-09-16 65 views
3

我一直在使用Symfony2來完成一個新項目,並且遇到了一個相當愚蠢的問題。Symfony2 OneToMany關係和形式

我有兩個主義實體Item和Comment之間的OneToMany關係。我現在有一個表單讓用戶爲一個給定的項目創建一個新的評論。創建新評論時,該評論當然有一個屬性Item,並且應該將其設置爲當前正在評論的項目。

當單擊一個Item上的註釋鏈接時,id會作爲參數發送到表單頁面,我的計劃是讓這個id填充一個隱藏字段,然後使用Data Transformer將其轉換爲一個Item 。

但是,我該如何做到這一點?如何將此ID存入表單中的隱藏字段,以便Data Transformer可以正確處理它?或者在Symfony2中使用表單時,是否有更好/更正確的方式來處理這種關係?

回答

3

你並不需要一個隱藏字段這一點。你的行動必須知道用戶評論哪個項目,這樣你就可以在評論設定的項目:

/** 
* @Route("/item/{id}/comment") 
*/ 
public function commentAction(Item $item) 
{ 
    $comment = new Comment; 
    $comment->setItem($item); 

    $form = $this->createForm('item_comment', $comment); 

    // ... 
} 
+0

謝謝!這對我來說非常合適。我相信卡洛斯格拉納多斯的方式也會起作用,雖然我沒有嘗試過,所以我會選擇這個作爲我的答案。 – oens

1

不需要數據轉換器。只需爲您的「Item」屬性創建一個表單字段並將其設置爲隱藏。像

$item = $this->getDoctrine() 
    ->getRepository('AcmeDemoBundle:Item') 
    ->find($id); 

    $comment = new Comment(); 
    $comment->setItem($item); 

    $form = $this->createFormBuilder($comment) 
      ... //add some fields 
      ->add('item', array('hidden'=>true)); 
      ->getForm(); 

當您收到的形式,並將其綁定的東西,對評論對象的「項目」屬性將設置正確