2012-09-25 35 views
2

我想創建一個窗體使用來自多個實體的一些字段。我已經創建了所有不同的實體,並且我沒有使用表單類。我需要知道如何處理表單並處理其數據,以便將它們保存到數據庫中正確的表中。如何使用symfony2中的多個實體字段創建一個獨特的窗體

這是我負責做那

public function createPublicSpaceAction() { 
    //My entities 
    $Room = new Room(); 
    $GuestList = new GuestList(); 
    $Guest = new Guest(); 

    //I need to know what to do from here 

    return $this -> render('AcmeUserBundle:Default:Forms/createPublicSpace.html.twig', array()); 
} 

我一直試圖找到一個解決方案,我想出了一個表單需要一個實體的想法控制器的一部分。所以也許解決方案是將這些實體合併爲一個,這樣我就可以輕鬆地創建表單。然後我必須將數據保存到相應的表中。但我想不出如何合併實體。

回答

2

我想出了一個臨時解決方案。對於那些想知道的人,我手動創建了一個看起來像所有我需要的實體合併的實體。這個新實體與Doctrine沒有關係,因此它不能創建表格。它的目標僅僅是讓我建立一個表單,並能夠通過這種形式操縱數據。然後,我將所有提交給相應實體字段的數據分配並保存到數據庫中。

我再次知道這不是最好的解決方案。但由於某些原因,我不會告訴,這是在這個時刻。我希望這可以幫助那些與我情況相同的人,並且毫不猶豫地發佈可能有幫助的鏈接或更好的方法來做到這一點。

1

強烈建議使用表單類http://symfony.com/doc/current/book/forms.html#creating-form-classes

他們都是爲了節省時間,使很多事情只是更容易。

但是要回答你的問題考慮以下幾點。你的行爲需要發佈一個帖子請求。所以趕上請求對象與職位數據:

use Symfony\Component\HttpFoundation\Request; 

public function createPublicSpaceAction(Request $request) 

然後得到一個表單生成intance並創建表單:

$builder = $this->createFormBuilder(); 

$builder->add('floor', 'text', array(
     'label' => 'Room floor', 
     'data' => $room->getFloor() 
)); 

,因爲你需要添加儘可能多的表單字段。有幾個內置的字段類型:http://symfony.com/doc/current/book/forms.html#built-in-field-types

創建表單:

$form = $builder->getForm(); 

傳遞表單模板:

return $this -> render('AcmeUserBundle:Default:Forms/ 
         createPublicSpace.html.twig', array(
    'roomForm' = $form 
)); 

,讓您的操作中發佈的數據

if ('POST' == $request->getMethod()) { 
    $data = $request->request->get("form"); 
} 

而在您的模板中,您可以自己渲染窗體或讓小枝做工作:

{{ form_widget(form.floor)}} 

所以這是最重要的事情提及。但是你應該通過http://symfony.com/doc/current/book/forms.html他們實際上告訴你我寫下的一切。

祝你好運;)

+1

非常感謝您的幫助,但我仍然不知道如何建立一個包含來自不同實體的領域,這些實體沒有任何共同點。 – iwooli

相關問題