Bonjour,

J'ai un formulaire d'inscription qui s'affiche de manière modale dans mon template de base "base.html.twig" afin qu'il soit accessible sur toutes les pages :

...
              <a id="call_registration_modal_btn" class="btn btn-secondary btn-dark {% if current_menu is defined and current_menu == 'registration' %}active{% endif %}" data-focus=true data-backdrop="static" data-keyboard="false" data-toggle="modal" href="#registrationModal">Sign up</a>
...
      {% 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>
...

Lorsque je clique sur le bouton "Sign up", tout se passe correctement avec un affichage modal du formulaire d'inscription.

Mon problème survient lorsque j'ai des erreurs au niveau du formulaire : je voudrais que la page à partir de laquelle il a été appelé soit ré-affichée et que le formulaire apparaisse en modal. Cependant, j'obtiens l'erreur suivante lors de la soumission du formulaire contenant des erreurs :

"An exception has been thrown during the rendering of a template ("Error when rendering "http://127.0.0.1:8000/" (Status code is 302).")."

Pour rappeler la page courante et indiquer s'il existe des erreurs au niveau du formulaire, dans mon controller, j'utilise une variable de session qui indique que le formulaire n'est pas valide et j'effectue une redirection vers la route courante :


class SecurityController extends AbstractController
{

    /**
     * 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
    {

        $this->container->get('session')->set('errorFomRegistration', false);
...
            $form = $this->createForm(UserType::class, $user, array('isAdmin' => $isAdmin, 'roles' => $this->getParameter('security.role_hierarchy.roles')));
            $template = 'security/registration.html.twig';
...
        $form->handleRequest($request);

        if ($form->isSubmitted())
        {

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

                $this->container->get('session')->set('errorFomRegistration', true);

                $route = $request->attributes->get('_route');

                return $this->redirectToRoute($route);

            }
...

Comme repris dans le premier bloc de code, en cas de formulaire non valide, j'indique que le formulaire modal doit être visible :


...
      {% 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 %}
...
                {{ render(controller('App\\Controller\\security\\SecurityController::registration', {'request': app.request})) }}
...

Afin d'afficher le formulaire en modal en cas d'erreur, j'utilise du Javascript au chargement de la page :


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

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

    $registrationDiv.modal('show');

  }

});

Quelqu'un aurait une idée de solution pour régler ce problème d'erreur 302 ?

Merci d'avance pour votre aide.

Aucune réponse