从一种表单中插入同一实体三遍

时间:2018-09-26 21:51:49

标签: forms symfony4

我正在使用symfony4,在我的项目中,我有实体Bill,它提供了两个包装:

1)第一包,用户在填写表格并将数据保存在数据库中后可以生成PDF上的一个帐单。

>

2)第二包,用户在填写表格并将数据保存在数据库中后,可以生成PDF中的三张账单。

>

第一个程序包很简单并且运行良好,我已经在控制器中创建了BillType和一个动作,一切都很好。

public function newBillFirstPack(Request $request)
{
    $entity = new Bill();
    $em = $this->getDoctrine()->getManager();
    $form = $this->createForm(BillType::class, $entity);
    $form->handleRequest($request);
    if ($form->isSubmitted()) {
        if ($form->isValid()) {
            $em->persist($entity);
            $em->flush();
            //...............
        }
    }
    return $this->render('frontOffice/bill/new_first_pack.html.twig', array(
        'form' => $form->createView()
    ));
}

问题在于第二包,我想知道如何如何从一种形式创建三张钞票。我试图创建3 FormType -FirstBillType和一根树枝来渲染其视图。 -SecondtBillType和一根树枝来渲染其视图。 -ThirdBillType和一根树枝也可以呈现其视图。

在控制器中,我创建了三种形式。

我还没有测试它,但是即使它起作用了,我也不喜欢它,我认为这不是一个干净的解决方案。想象一下,如果有一天我想在formType中编辑属性,那么我必须在三个formType和三个html.twig视图中对其进行编辑,如果我想在表单中删除或添加属性,则需要同样的操作。

我在文档“如何嵌入表单集合”中看到过,但是该示例是如何多次嵌入一个属性。

任何好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果我了解您的需求。新操作可以处理此问题,并且根据您的需要,表单可以运行其他操作。

public function newBillThirdPack(Request $request)
{
    $entity = new Bill();
    $em = $this->getDoctrine()->getManager();
    $form = $this->createForm(BillType::class, $entity);
    $form->handleRequest($request);
    if ($form->isSubmitted()) {
        if ($form->isValid()) {
            $em->persist($entity);
            $em->persist(clone $entity);
            $em->persist(clone $entity);
            $em->flush();
            //...............
        }
    }
    return $this->render('frontOffice/bill/new_third_pack.html.twig', array(
        'form' => $form->createView()
    ));
}