在Symfony 4的单个页面上生成多个Ajax表单

时间:2018-10-15 20:05:17

标签: php jquery ajax symfony twig

我想在ajax的单个页面上生成多个表单,如果表单无效,则无法加载下一个表单。

我有3个步骤:

  • 注册
  • 要约选择
  • 付款

有可能吗?

我尝试提交表单,但我的条件不起作用, 我的注册表格第二次加载到第一个表格下方:

day1

我的控制器:

day2

我的主要观点:

if ($form->isSubmitted() === true && $form->isValid() === true) {}

我的用户表单视图:

  /**
 * @Route("/inscription", name="akp_inscription", methods={"GET", "POST"})
 *
 * @Security("is_granted('IS_AUTHENTICATED_ANONYMOUSLY')")
 */
public function inscriptionAction(): Response
{
    return $this->render('administration/securite/inscription.html.twig');
}

/**
 * @Route("/ajax/inscription-form", name="akp_ajax_inscription", condition="request.isXmlHttpRequest()", methods={"POST"})
 */
public function ajaxInscriptionForm(Request $request): Response
{
    $utilisateur = new User();

    $form = $this->createForm(UserType::class, $utilisateur);
    $form->handleRequest($request);

    if ($form->isSubmitted() === true && $form->isValid() === true) {
        $emailAlreadyExist = $this->entityManager->getRepository(User::class)->findOneBy([
            'email' => $utilisateur->getEmail(),
        ]);

        $usernameAlreadyExist = $this->entityManager->getRepository(User::class)->findOneBy([
            'username' => $utilisateur->getUsername(),
        ]);

        if ($emailAlreadyExist !== null) {
            $this->addFlash('danger', 'Cet email n\'est pas disponible');
            $this->redirectToRoute('akp_inscription');
        }

        if ($usernameAlreadyExist !== null) {
            $this->addFlash('danger', 'Ce pseudo n\'est pas disponible');
            $this->redirectToRoute('akp_inscription');
        }

        $this->entityManager->persist($utilisateur);
        $this->entityManager->flush();

        return $this->render('administration/securite/ajax/choix_offre_form.html.twig');
    }

    return $this->render('administration/securite/ajax/inscription_form.html.twig', [
        'form' => $form->createView(),
    ]);
}

/**
 * @Route("/ajax/get-choix-offre-form", name="akp_ajax_inscription_choix_offre", condition="request.isXmlHttpRequest()", methods={"POST"})
 */
public function ajaxGetChoixOffreForm(Request $request): Response
{
    return $this->render('administration/securite/ajax/choix_offre_form.html.twig');
}

/**
 * @Route("/ajax/get-paiement-form", name="akp_ajax_inscription_paiement", condition="request.isXmlHttpRequest()", methods={"POST"})
 */
public function ajaxGetPaiementForm(Request $request): Response
{
    return $this->render('administration/securite/ajax/paiement_form.html.twig');
}

0 个答案:

没有答案