2013-01-08 6 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

엔터티에없는 폼에 추가 필드가 필요하면 symfony 2.0.9에서 -> add ('extraField', null, array ('property_path'=> false)) –

관련 문제