Закрыть форму FancyBox после проверки Symfony - PullRequest
0 голосов
/ 04 мая 2019

Как закрыть FancyBox, содержащий форму Symfony после отправки формы? Я не хочу закрывать fancybox после немедленного нажатия кнопки, так как форма может вызвать ошибки.

Кажется, что одно решение использует две функции Symfony (с двумя различными маршрутами) в контроллере:

  • Один для рендеринга формы
  • Один для возврата ответа "json" после отправки формы.

Таким образом, ответ содержит ошибки. Затем в функции Ajax, согласно ошибкам, FancyBox может быть закрыт.

Я видел два недостатка в этом решении:

  1. Будет ли форма совершать два звонка при каждой отправке? Мы нарушаем логику Symfony?
  2. Требуется ли для возврата ответа json отображение ошибок вручную в форме?

Это лучший способ выступить?

Сильфон - это структура двух функций в контроллере:

     /**
     * @param Request $request
     * @return Response
     * @Route("/rendering_form", name="renderingForm")
     */
     public function renderingForm(Request $request){
          // ... Data request for rendering

          // Building form for rendering
          $form = $this->createMyForm()->getForm();

          $form->handleRequest($request);

          if ($form->isSubmitted() && $form->isValid()) {
              return $this->redirectToRoute('home');
          }

          return $this->render('@Map/Book/book.html.twig', 
                              array(  // data for rendering ,
                                      "form" => $form->createView()
                               ));
    /**
     * @param Request $request
     * @return Response
     * @Route("/rendering_form/validation", name="validationRenderingForm")
     */
    public function validationRenderingForm(Request $request){
        $form = $this->createMyForm();
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $data = $form->getData();
            $errors = $this->getDataErrorCustom($data);

            if ($errors){
                 $response = ['status' => 'fail',
                              'errors' => $errors ];
            }else{
                 $response = ['status' => 'success'];
            }
        }else {
            $response = ["status" => 'fail',
                         "errors" => $form->getErrors()];
        }

        $reponse = new Response(json_encode($reponse));
        $reponse->headers->set('Content-Type', 'application/json');
        return $reponse;
    }

1 Ответ

0 голосов
/ 05 мая 2019

fancybox предоставляет удобный обратный вызов beforeClose, вы можете использовать его для остановки закрытия модального режима, просто вернув false. Таким образом, если вы решите использовать ajax для отправки и проверки вашей формы, вы можете отобразить значок загрузки в ожидании ответа (используйте hideLoading для сокрытия):

$.fancybox.getInstance().showLoading( $.fancybox.getInstance().current );

и закройте в случае успеха:

$.fancybox.getInstance().close()

А для части php я бы предложил последовать комментарию dbrumann.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...