2013-01-08 2 views
0

У меня есть тип поля сущности в моей форме, но затем, когда я пытаюсь получить значения из контроллера, я получаю сообщение об ошибке.Как получить массив объектов из объекта reques?

Это моя форма строитель

$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 пуста или что-то , и я получаю 'recursos' => null в исключении symfony. я действительно ценю помощь здесь: D

ответ

1

сам запрос содержит исходные данные (скаляры). Когда вы получите bind запрос к форме, он преобразует эти необработанные данные в нормализованные данные. Массив идентификаторов будет преобразован в массив сущностей, а затем передается в $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

Проблема заключается в том, что атрибут не отображается, поэтому он игнорируется> Bind ($ запрос '$ form-) 'таким образом, я не могу использовать' $ entity-> getRecursos' ... xD – JhovaniC

+0

При отображении форм в объекты все поля отображаются. Любые поля в форме, которые не существуют на сопоставленном объекте, приведут к исключению. –

+0

Если вам нужны дополнительные поля в форме, которая не существует в вашей сущности, тогда добавьте -> add ('extraField', null, array ('property_path' => false)) –

Смежные вопросы