首页 > 解决方案 > 从一个表单中插入同一个实体 3 次

问题描述

我正在使用 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 中的一个属性,那么我必须在三个 formsType 和三个 html.twig 视图中编辑它,如果我想在表单中删除或添加一个属性,也是一样的。

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

有什么好的解决办法吗?

标签: formssymfony4

解决方案


如果我明白你需要什么。新动作可以处理这个问题,并且根据您的需要表单可以运行不同的动作。

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()
    ));
}

推荐阅读