dongxian1921 2018-10-17 14:26
浏览 50
已采纳

使用symfony 4从twig中的collectionType表单渲染字段

I want to use a form_widget to render a field for a collectionType form. Here is my controller :

/**
 * @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()
    ]);
}

and when i try :

{{ form_widget(tickets.firstname)}}

or

{{ form_widget(form.firstname)}}

or

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

I have an error :

Neither the property "firstname" nor one of the methods "firstname()", "getfirstname()"/"isfirstname()"/"hasfirstname()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".

Here is my form :

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条回答 默认 最新

  • dongwen4630 2018-10-17 15:56
    关注

    To render a field I just need to use the prototype in twig:

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

    and add this in my form method, in my controller:

    'allow_add' => true
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置