2013-01-08 62 views
0

我在表單中有一個實體字段類型,但是當我嘗試從控制器獲取值時,出現錯誤。如何從請求對象中檢索實體數組?

這是我的表單生成

$builder 
     ->add('recursos', 'entity', array(
       'class' => 'SIGIConvocatoriasBundle:Recurso', 
       'property' => 'nombre', 
       'multiple' => true, 
       'mapped' => false 
       )) 
     ->add('requisitos', 'entity', array(
       'class' => 'SIGIConvocatoriasBundle:Requisito', 
       'property' => 'nombre', 
       'multiple' => true, 
       'mapped' => false 
       )) 
    ; 

,這是我的控制器

$entity = new Convocatoria(); 
$form = $this->createForm(new ConvocatoriaType(), $entity); 
$form->bind($request); 
$recursos = $request->request->get('recursos'); 
foreach ($recursos as $recurso) 
{ 
    //Do something ... 
} 

但我在這裏得到一個錯誤

Invalid argument in foreach ... 

就像如果$recursos變量爲空或東西,並且symfony例外中我得到了'recursos' => null。 我真的很欣賞這裏一些幫助:d

回答

1

本身包含原始數據(標量)的請求。 當您向bind請求表單時,它會將此原始數據轉換爲標準化數據。 ID的陣列將被轉換爲實體的陣列,然後被傳遞到$entity->setRecursos(); // or each one to $entity->addRecurso();

$form = $this->createForm(new ConvocatoriaType(), $entity) 
$form->bind($request); 

$formData = $request->request->get($form->getName()); 
$formData['recursos']; // should be an array of ids 

$entity->getRecursos(); // array of entities 
+0

是的,我發現的唯一可能的方式是使用'$ form ['recursos']'。謝謝你的幫助! – JhovaniC

0

嘗試

   $entity = new Convocatoria(); 
      $form = $this->createForm(new ConvocatoriaType(), $entity); 
      $form->bind($request); 

       foreach ($entity->getRecursos() as $recurse) { 
        //do something 
       } 

      $em = $this->getDoctrine()->getEntityManager(); 
       $em->persist($entity); 
       $em->flush(); 
+0

的問題是,該屬性沒有被映射,因此它是由'$形式 - >綁定($請求忽略)'因此我不能使用'$ entity-> getRecursos' ... xD – JhovaniC

+0

將表單映射到對象時,所有字段都被映射。映射對象上不存在的任何表單上的字段將導致異常。 –

+0

如果你需要額外的字段在實體中不存在的形式,那麼添加 - > add('extraField',null,array('property_path'=> false)) –