Подтверждение формы после ее отправки и проверки в Symfony - PullRequest
2 голосов
/ 14 января 2020

У меня есть форма встречи после того, как она была отправлена, вы получаете подтверждение данных, которые вы заполнили. У подтверждения есть кнопка, которая при нажатии на нее должна вставить данные в базу данных.

Мой вопрос, как реализовать кнопку подтверждения, чтобы она вставлялась?


Я думал о том, чтобы сделать оператор if следующим образом:

if ($form->isSubmitted() && $form->isValid()) {

}

И в этом операторе if другой оператор if, который проверял, была ли отправлена ​​кнопка подтверждения, поэтому я мог бы использовать диспетчер сущностей для вставки его в базу данных.

if ($form->isSubmitted() && $form->isValid()) {

  if () {
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($appointment);
        $entityManager->persist($customer);
        $entityManager->flush();
  }

}

Форма назначения: Форма встречи

Шаблон подтверждения: Шаблон подтверждения


Форма назначения:

{% block body %}

    <p>new appointment</p>

    {{ form_start(form) }}
    {{ form_widget(form) }}
    <button class="btn">{{ button_label|default('Plan In') }}</button>
    {{ form_end(form) }}

{% endblock %}

Подтверждение шаблон

{% block body %}

    <p>confirm appointment</p>

    <p>{{ customer_name }}</p>
    <p>{{ customer_phone }}</p>
    <p>{{ customer_email }}</p>
    <hr>
    <p>{{ barber_name }}</p>
    <p>{{ treatment_name }}</p>
    <p>{{ appointment_date|date('d-m-Y') }}</p>
    <p>{{ appointment_time|date('H:i') }}</p>

    <button class="btn">{{ button_label|default('Confirm') }}</button>

{% endblock %}

Если в моем вопросе есть какая-то путаница, пожалуйста, попросите разъяснений, и если вы считаете, что есть лучший способ достичь того, чего я хочу достичь Предлагаю аренду.

Любая помощь приветствуется, Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 16 января 2020

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

/**
 * @Route("/submit", name="form-submit")
 */
public function submitApp(){
  if ($form->isSubmitted() && $form->isValid()) {
     return $this->redirectToRoute('confirm',[form])
  }
  return $this->render('appo.html.twig', [
        'form' => 'form',
    ]);    
}

После того, как будет нажата кнопка подтверждения, мы сохраним значение.

/**
 * @Route("/confirm", name="form-confirm")
 */
public function confirmApp()
{
  if ($form->isSubmitted() && $form->isValid()) {
      // if configrm is pressed 
      $entityManager = $this->getDoctrine()->getManager();
      $entityManager->persist($appointment);
      $entityManager->persist($customer);
      $entityManager->flush();
  }
}

в представление

 {{ form_widget(myFieldName, { ‘disabled’:’disabled’ }) }}

для отображения значений формы с ограничениями ReadOnly

Если вы действительно хотите реализовать пользовательский шаблон на странице подтверждения, не используя form, вы можно получить значения из form следующим образом:

$data = $form->getData();

Присвойте значения с установщиками в ваш объект следующим образом

$app = new Apportionment();
$app->setCustomer_name($form->get('customer_name')->getData());

, затем сохраните значение, если нажата кнопка подтверждения .

$entityManager->persist($appointment);
$entityManager->flush();

надеюсь, это поможет.

0 голосов
/ 14 января 2020

Если ваш шаблон подтверждения не является формой, лучший способ отправить данные контроллеру - отправить его с запросом Ajax. При нажатии на кнопку отправьте запрос:

$('#button').click(function(e) {
            // guetting all the data you want to send
                $.ajax({
                    type: 'POST',
                    // url is the route of your controller action 
                    url: url,
                    processData: true,
                    data: objectYouWantToSend
                    beforeSend: function(request) {console.log('sending someting');},
                    success: function (data) {
                        console.log("nailed it");
                        // some logic you want to do
                    },
                    error: function(xhr, textStatus, thrownError) {
                        console.log('ooops, sometin went wrong');
                    }
                });
            }
        });

Затем в вашем контроллере вы можете получить данные с помощью:

if($request->isXmlHttpRequest()) {
        if($request->isMethod('POST')) {
            // getting data from request
            $data = $request->request;

            // symfo logic you want to do


            return new JsonResponse(array($status => $message));

        }
}
...