我想使用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)}}
我有一个错误:
属性“名字”或方法“名字()”,“ 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,
]);
}
}
答案 0 :(得分:0)
要渲染一个字段,我只需要在树枝中使用原型:
{{ form_widget(form.vars.prototype.firstname) }}
并在我的控制器中的form方法中添加它:
'allow_add' => true
答案 1 :(得分:0)
您可能想将实体的代码添加到您的问题中: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 %}