代码之家  ›  专栏  ›  技术社区  ›  hous

从一个表单中插入同一实体三次

  •  0
  • hous  · 技术社区  · 6 年前

    我正在使用symfony4,在我的项目中,我有和实体比尔,它提供两个包:

    (一) 第一个包,用户可以生成 只有一个 在填写表格并将数据保存到数据库中后以PDF格式提交的账单,它有自己的价格。

    2个) 第二个包,用户可以生成 在填写表格并将数据保存在数据库中之后,PDF格式的账单也有自己的价格。

    第一个包很简单,工作也很好,我在控制器中创建了BillType和action,一切都很好。

    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个窗体类型 -第一个billtype和一个渲染其视图的细枝。 -第二个billtype和一根树枝来呈现它的视图。 -ThirdBillType和一根树枝也可以呈现它的视图。

    在控制器中,我创建了三个表单。

    我还没有测试它,但即使它工作我不喜欢它,我觉得这不是一个干净的解决方案。想象一下,如果有一天我想在formType中编辑一个属性,那么我必须在三个formsType和三个html.twig视图中编辑它,如果我想在表单中删除或添加一个属性,也是这样。

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

    有什么好办法吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   mcek    6 年前

    如果我知道你需要什么。新操作可以处理此问题,并且根据需要表单可以运行不同的操作。

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