Пустая переменная сеанса после первой перезагрузки - PullRequest
0 голосов
/ 21 января 2020

У меня есть форма регистрации для учетной записи пользователя в модальном режиме и вызвана из моего шаблона 'base. html .twig'. Я хотел бы, чтобы после отправки формы возникали ошибки формы (проверка ограничений на уровне сущности), я бы хотел, чтобы моя модальная форма отображалась повторно.

Итак, для этого в моем контроллере, обрабатывающем регистрацию Если форма недействительна, я создаю переменную сеанса. Затем в моем шаблоне 'base. html .twig' я проверяю, существует ли переменная сеанса. Если да, то я передаю атрибут видимости данных 1 на модальном уровне div. И наконец, в JavaScript, если этот атрибут видимости данных равен 1, я показываю указанный div.

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

Здесь, на скриншотах, поток, чтобы попытаться меня лучше понять.

Я нажимаю на кнопку создания учетной записи:

Screenshot 1

Я заполняю модальную форму, явно кодируя ошибки:

Screenshot 2

Я отправляю форма:

Screenshot 3

После отправки форма не отображается повторно, несмотря на наличие ошибок:

Screenshot 4

Мне нужно нажать на кнопку «Зарегистрироваться», чтобы снова отобразить форму:

Screenshot

Screenshot 6

Это проблематично c, поскольку конечный пользователь не узнает об ошибках и должен повторно щелкнуть кнопку «Зарегистрироваться».

Вот мой код.

В моем шаблоне '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'));

            }

        }
...

И, наконец, в моем приложении. 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');

  }
...

У всех есть Идея вытащить меня из этой проблемы, над которой я пытался в течение нескольких недель?

Заранее благодарю за помощь.

1 Ответ

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

Я сделал то же самое в Laravel. Вам нужно применить метод javascript click () к модальной кнопке открытия внутри, если условие.

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