第一次重载后的空会话变量

问题描述 投票:0回答:1

我有一个模态用户帐户的注册表格,并从我的模板'base.html.twig'中调用。我希望如果提交后存在表单错误(在实体级别检查约束),我希望重新显示我的模式表单。

因此,为此,在我的控制器中处理注册,如果该表格无效,则创建一个会话变量。然后,在我的模板“ base.html.twig”中,检查会话变量是否存在。如果是,那么我将数据可见性属性在模式div级别传递给1。最后,在JavaScript中,如果此数据可见性属性为1,则显示上述div。

我的问题是,如果存在错误,则提交后表单不会自动重新显示。我必须自己单击按钮。

在这里,在屏幕快照中,尝试使我更好地理解的流程。

我单击帐户创建按钮:

Screenshot 1

我通过明确编码错误来完成模态形式:

Screenshot 2

我提交表格:

Screenshot 3

提交后,尽管存在错误,也不会重新显示该表格:

Screenshot 4

我必须单击“注册”按钮以再次显示表单:

Screenshot

Screenshot 6

这是有问题的,因为最终用户将不知道有错误,因此必须重新单击“注册”按钮。

这是我的代码。

在我的模板'base.html.twig'中:

...
      {% if app.session.get('errorFomRegistration') %}
        <div id="registrationModal" class="modal fade" role="dialog" data-visibility='1'>
      {% else %}
        <div id="registrationModal" class="modal fade" role="dialog" data-visibility='0'>
      {% endif %}
          <div class="modal-dialog">
            <div class="modal-content">
              <div class="modal-header">
                <h4 class="modal-title">Sign up</h4>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">&times;</span>
                </button>
              </div>
              <div class="modal-body">
                <div>
                  {% if app.session.get('errorFomRegistration') %}
                    {{ include('_messages.html.twig') }}
                  {% endif %}
                </div>
                {{ render(controller('App\\Controller\\security\\SecurityController::registration', {'request': app.request})) }}
              </div>
            </div>
          </div>
        </div>
        </div>
...

在我的控制器'SecurityController.php'中:

    /**
     * User registration
     * 
     * @Route("/security/registration/{shortForm}", name="security.registration")
     *
     * @param bool $shortForm
     * @param Request $request
     * @param EntityManagerInterface $manager
     * @param UserPasswordEncoderInterface $encoder
     * @param AuthorizationCheckerInterface $authChecker
     * @param \Swift_Mailer $mailer
     * @param UserRepository $userRepository
     * 
     * @return Response
     */
    public function registration(bool $shortForm = false, Request $request, EntityManagerInterface $manager, UserPasswordEncoderInterface $encoder, 
                                  AuthorizationCheckerInterface $authChecker, \Swift_Mailer $mailer, UserRepository $userRepository): Response
    {

        $session = $this->get('session');

        $session->set('errorFomRegistration', false);
...
        $form->handleRequest($request);

        if ($form->isSubmitted())
        {

            if ($form->isValid())
            {
...
            }
            else 
            {

                $session->set('errorFomRegistration', true);
                \dump($session->get('errorFomRegistration'));

            }

        }
...

最后,在我的app.js中:

...
  // Display the login modal form if there is an autentication error
  var $registrationDiv = $('#registrationModal');

  console.log('Before display');

  if($registrationDiv.data('visibility') == '1')
  {

    console.log('Visible');

    $registrationDiv.modal('show');

  }
...

任何人都有让我摆脱这个问题的想法,我已经尝试了好几个星期?

谢谢您的帮助。

php forms symfony session constraints
1个回答
0
投票

我在Laravel中做过同样的事情。如果需要,您需要在模式打开按钮上应用javascript click()方法。

© www.soinside.com 2019 - 2024. All rights reserved.