Я пытаюсь реализовать коллекции форм. У меня есть члены, и каждый член может иметь несколько членов. Данный объект-член для «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) }}