Рендеринг поля из формы collectionType в веточку с Symfony 4 - PullRequest
0 голосов
/ 17 октября 2018

Я хочу использовать form_widget для визуализации поля для формы collectionType.Вот мой контроллер:

/**
 * @Route("/ticket", name="ticket")
 */
public function ticket(Request $request)
{
    $data = $request->getSession()->get('orders');
    $number = $data->getNumberOfTickets();
    for ($i=1; $i<=$number ;$i++){
    $tickets[] = new Tickets();
    }
    $form = $this->createForm(CollectionType::class, $tickets, ['entry_type' => TicketsType::class] );
    $form->handleRequest($request);
    dump($request);

    return $this->render('louvre/ticket.html.twig', [
        'tickets' =>$tickets,
        'form' => $form->createView()
    ]);
}

и когда я пытаюсь:

{{ form_widget(tickets.firstname)}}

или

{{ form_widget(form.firstname)}}

или

{{ form_widget(form.tickets.firstname)}}

У меня естьошибка:

Ни свойство "firstname", ни один из методов "firstname ()", "getfirstname ()" / "isfirstname ()" / "hasfirstname ()" или "__call () "существуют и имеют открытый доступ в классе" Symfony \ Component \ Form \ FormView ".

Вот моя форма:

class TicketsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('category', CheckboxType::class, [
                'attr' => [
                    'class' => 'form-control'
                ]
            ])
            ->add('firstname', TextType::class, [
                'attr' => [
                    'class' => 'form-control'
                ]
            ])
            ->add('lastname', TextType::class, [
                'attr' => [
                    'class' => 'form-control'
                ]
            ])
            ->add('country', TextType::class, [
                'attr' => [
                    'class' => 'form-control'
                ]
            ])
            ->add('dateOfBirth', DateType::class, [
                'attr' => [
                    'class' => 'form-control'
                ],
                'widget' => 'single_text',
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Tickets::class,
        ]);
    }
}

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Возможно, вы захотите добавить код сущности в свой вопрос: Tickets.php

В Tickets.php вы, вероятно, определяете класс Tickets, и в этом классе у вас, вероятно, нет ни одного из методов.указан в сообщении об ошибке.Добавление этого метода с точным именем должно помочь:

public function getfirstname() { return $this->firstname; }

О коде веточки: вы можете добавить еще несколько к вопросу.Например, у вас есть {{ form_start(form) }} или что-то еще в начале?

Тогда, поскольку это CollectionType, вы, вероятно, захотите визуализировать некоторое поле ввода для каждого из элементов в коллекции.Может быть, что-то вроде этого:

{% for ticket in form.tickets %}
   <div class="ticket">{{ form_widget(ticket.firstname) }}</div>
{% endfor %}
0 голосов
/ 17 октября 2018

Чтобы отобразить поле, мне просто нужно использовать прототип в ветке:

{{ form_widget(form.vars.prototype.firstname) }}

и добавить это в моем методе формы, в моем контроллере:

'allow_add' => true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...