Вставить один и тот же объект три раза из одной формы - PullRequest
0 голосов
/ 27 сентября 2018

Я использую symfony4, и в моем проекте у меня есть и сущность Билл, и она предлагает два пакета:

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 голосов
/ 03 октября 2018

Если я понимаю, что вам нужно.Новое действие может справиться с этим и в зависимости от ваших потребностей форма может запускать различные действия.

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()
    ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...