首页 > 解决方案 > 使用 symfony 4 从 twig 中的 collectionType 表单中渲染一个字段

问题描述

我想使用 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\" 中具有公共访问权限组件\窗体\窗体视图”。

这是我的表格:

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,
        ]);
    }
}

标签: phpformssymfonytwig

解决方案


要渲染一个字段,我只需要在 twig 中使用原型:

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

并将其添加到我的表单方法中,在我的控制器中:

'allow_add' => true

推荐阅读