2014-11-14 5 views
0

Я пытаюсь реализовать коллекции форм. У меня есть члены, и каждый член может иметь несколько членов. Данный объект-член для «createForm()» имеет массив с членствами, которые правильно извлекаются из базы данных. Форма участника получается правильно, но кажется, что form.memberships пуст. Он даже не отображает «Тест».Symfony2 Из коллекции нет элементов

Контроллер

public function memberAction($id) { 
    $request = Request::createFromGlobals(); 
    $user_provider = $this->get('webservice_user_provider'); 

    if ($id === "new") { 
     $member = new WebserviceUser(); 
     $name = "Neues Mitlgied"; 
    } else if (intval($id) != 0) { 
     $member = $user_provider->getUserById(intval($id)); 
     $member->getMemberships(); 
     $name = $member->getName() . " " . $member->getLastname(); 
    } else { 
     throw new NotFoundHttpException('No Member found!'); 
    } 

    $form = $this->createForm(new MemberType($this->get('webservice_config_provider')), $member); 

    $form->handleRequest($request); 

    if ($form->isValid()) { 
     return $this->redirect($this->generateUrl('bow_exciting_fit_member', array('id' => $user_provider->persistMember($form->getViewData())))); 
    } 

    return $this->render('BOWExcitingFitBundle:Default:member.html.twig', array(     
       "member" => $member, 
       "form" => $form->createView() 
    )); 
} 

MemberType

class MemberType extends AbstractType { 

function __construct(\BOW\ExcitingFitBundle\Webservice\WebserviceConfigProvider $config) { 
    $this->config = $config; 
} 

public function buildForm(FormBuilderInterface $builder, array $options) {  

    ... MORE CODE ... 

    $builder->add('memberships', 'collection', array(
     'type' => new MembershipType($this->config), 
     'by_reference' => false, 
     'allow_add' => true)); 

    ... MORE CODE ... 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) { 
    $resolver->setDefaults(array(
     'data_class' => 'BOW\ExcitingFitBundle\Webservice\WebserviceUser', 
    )); 
} 

public function getName() { 
    return 'member'; 
} 

} 

MembershipType

class MembershipType extends AbstractType { 

function __construct(\BOW\ExcitingFitBundle\Webservice\WebserviceConfigProvider $config) { 
    $this->config = $config; 
} 

public function buildForm(FormBuilderInterface $builder, array $options) { 

    ... MORE CODE ... 

    $builder->add('id', 'hidden'); 
    $builder->add('user', 'hidden'); 

    ... MORE CODE ... 

} 

public function setDefaultOptions(OptionsResolverInterface $resolver) { 
    $resolver->setDefaults(array(
     'data_class' => 'BOW\ExcitingFitBundle\Webservice\WebserviceMembership', 
    )); 
} 

public function getName() { 
    return 'membership'; 
} 

} 

Шаблон

{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }} 
    <div class="ui divided list memberships" data-prototype="{{ include('BOWExcitingFitBundle:Form:membership-prototype.html.twig', { 'form': form.memberships.vars.prototype })|e }}">  
    {% for membership in form.memberships %} 
     Test 
     {{ include('BOWExcitingFitBundle:Form:membership-prototype.html.twig', { 'form': membership }) }} 
    {% endfor %} 
    </div>    
{{ form_end(form) }} 

ответ

0

Даже если я не использую доктрины, я должен был использовать ArrayCollection() вместо массива для членства.

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