【发布时间】:2018-10-12 19:15:34
【问题描述】:
我想用 symfony 的一个提交按钮在一页中创建多个表单。我检查了文档,发现我需要制作一个带有 collectiontype 字段的表单,但我不知道如何继续。我在两页中有两个表单,第一页用户告诉下一页将有多少个表单。我已经创建了我的第一个表单并且它工作正常,我有第一个表单的数据,但是现在我如何根据提交的数据创建包含多个表单的第二个页面。 这是我的第一个表格:
class OrdersType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add ('tickets', CollectionType::class, [
'entry_type' => TicketsType::class,
'allow_add' => true
])
->add('numberOfTickets', ChoiceType::class, [
'attr' => [
'class' => 'form-control'
],
'choices' => [
'1' => 1,
'2' => 2,
'3' => 3,
'4' => 4,
'5' => 5,
]
])
->add('date', DateType::class, [
'attr' => [
'class' => 'form-control'
],
'widget' => 'single_text'
])
->add('type', ChoiceTYpe::class, [
'attr' => [
'class' => 'form-control'
],
'choices' => [
'Journée' => 1,
'Demi-journée(à partir de 14 heures)' => 0,
]
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Orders::class,
]);
}
}
还有我的第二个表单(我想在第二页复制的那个):
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,
]);
}
}
和我的控制器:
/**
* @Route("/", name="home")
*/
public function home(Request $request, SessionInterface $session)
{
$Orders = new Orders();
$form = $this->createForm(OrdersType::class, $Orders);
$form->handleRequest($request);
if($form->isSubmitted()){
$formData = $form->getData();
$session->set('orders', $formData);
return $this->redirectToRoute('ticket');
}
$repo = $this->getDoctrine()->getRepository(Tickets::class);
$tickets = $repo->findAll();
return $this->render('louvre/home.html.twig', [
'form' => $form->createView()
]);
}
/**
* @Route("/ticket", name="ticket")
*/
public function ticket(Request $request, SessionInterface $session)
{
$data = $session->get('orders');
$Orders = new Orders()
for ($i=0; $i<$data->getNumberOfTickets() ;$i++){
echo 'test';
$tickets = new Tickets();;
$form = $this->createForm(OrdersType::class, $Orders);
$form->handleRequest($request);
};
$repo = $this->getDoctrine()->getRepository(Tickets::class);
$tickets = $repo->findAll();
return $this->render('louvre/ticket.html.twig', [
'form' => $form->createView()
]);
}
【问题讨论】:
-
您写道:“使用一个提交按钮在一个页面中创建多个表单”。我认为如果只有一个提交按钮,您必须考虑它是一个表单而不是多个表单
-
看看 craue/form-flow-bundle。它提供您所需要的。
-
是的,我已经知道我需要创建一个表单,但是这个表单包含多个表单作为字段。 @mblaettermann 好的,我会看看这个谢谢,我会告诉你它是否很好。
-
@mblaettermann 我检查了看起来非常好的 craue 表单流程,但我发现它只需要一个模板来呈现所有表单,但我需要不同的 css 样式表来执行不同的步骤,是否可以这样做用craue形式流?
标签: php symfony symfony-forms