我正在使用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视图中对其进行编辑,如果我想在表单中删除或添加属性,则需要同样的操作。
我在文档“如何嵌入表单集合”中看到过,但是该示例是如何多次嵌入一个属性。
任何好的解决方案吗?
答案 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()
));
}