2013-06-26 48 views
0

如果我有一個FormType對象,它具有設置data_class的setDefaultOptions方法,我應該如何從它獲取實體以堅持Doctrine ORM?從data_class獲取實體 - 在Symfony2中的正確方法

$form = $this->createForm(new CarModelsType()); 
     $form->handleRequest($request); 

     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist(????HERE????); 
     } 

我應該把$ form-> getData()放在「???? HERE ????」中。我只是不知道這是否是正確的做法,因爲它看起來討厭

回答

1

對於createAction():

public function createAction(Request $request) 
{ 
    $entity = new CarModel(); 
    $form = $this->createForm(new CarModelTypeType(), $entity); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($entity); 
     $em->flush(); 

     //... 
    } 
    //... 
} 
+0

我在data_class指定的實體,因爲正如我所說,我在窗體類 – user2394156

0

有2例。

1)你給了一個對象到您的窗體:

的對象會自動更新,並與從形式新值水合,你可以保存對象。

$carModel = ... ; // Get or new object of the entity 

$form = $this->createForm(new CarModelsType(), $carModel); // Note, $carModel is given 
$form->handleRequest($request); 

if ($form->isValid()) { 
    $em = $this->getDoctrine()->getManager(); 
    $em->persist($carModel); // Save the object $carModel 
    $em->flush(); 
} 

2)intitializing表單時,你不給的對象:

所以,你需要與$form->getData()檢索實體。

$form = $this->createForm(new CarModelsType()); // Note : no object given 
$form->handleRequest($request); 

if ($form->isValid()) { 
    $em = $this->getDoctrine()->getManager(); 
    $em->persist($form->getData()); // You get the object after with $form->getData() 
    $em->flush(); 
} 

另外:

注意$form->getData()作品始終,甚至當你給一個對象到您的表單!所以,你可以一直使用$form->getData()

+0

BTW 1號僅僅是沒用的,它不是在所有同樣的事情!給一個對象允許你編輯一個已存在的對象,或者在'data_class'用來驗證的時候爲表單賦予默認值! – user2394156

+0

沒有指定data_class .... – Sybio

+0

是不是像給createForm一個空實體一樣指定data_class? – user2394156

相關問題