IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Variable de session vide après le premier reload


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Variable de session vide après le premier reload
    Bonjour,

    J'ai un formulaire d'enregistrement d'un compte utilisateur en modal et appelé depuis mon template 'base.html.twig'. Je voudrais que si des erreurs de formulaire existent après le submit (contrôle des contraintes au niveau de l'entité), je voudrais que mon formulaire modal soit ré-affiché.

    Donc, pour ce faire, dans mon controller traitant l'enregistrement, si le formulaire n'est pas valide, je crée une variable de session. Ensuite, dans mon template 'base.html.twig' je vérifie si la variable de session existe. Si oui, alors je passe l'attribut data visibility à 1 au niveau de la div modale. Et pour terminer, en JavaScript, si cet attribut data visibility est à 1, je fais un show de ladite div.

    Mon problème est que, si des erreurs sont présentes, le formulaire n'est pas automatiquement ré-affiché après le submit. Il faut que je clique moi-même sur le bouton pour le faire.

    Voici, en captures d'écran, le flux afin de tenter me me faire comprendre au mieux .

    Je clique sur le bouton de création d'un compte :

    Nom : Capture1.JPG
Affichages : 660
Taille : 9,1 Ko

    Je complète le formulaire modal en encodant expressément des erreurs :

    Nom : Capture2.JPG
Affichages : 442
Taille : 56,6 Ko

    Je soumets le formulaire :

    Nom : Capture3.JPG
Affichages : 433
Taille : 9,3 Ko

    Après la soumission, le formulaire n'est pas ré-affiché malgré l'existence d'erreurs :

    Nom : Capture4.JPG
Affichages : 429
Taille : 15,9 Ko

    Je dois moi-même re-cliquer sur le bouton 'Sign up' pour ré-afficher le formulaire :

    Nom : Capture1.JPG
Affichages : 660
Taille : 9,1 Ko

    Nom : Capture5.JPG
Affichages : 442
Taille : 44,8 Ko

    C'est problématique car l'utilisateur final ne saura pas qu'il existe des erreurs et qu'il doit alors re-cliquer sur le bouton 'Sign up'.

    Voici mon code.

    Dans mon template 'base.html.twig' :

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    ...
          {% 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>
    ...

    Dans mon controller 'SecurityController.php' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
        /**
         * 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'));
     
                }
     
            }
    ...
    Et pour terminer, dans mon app.js :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    ...
      // 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');
     
      }
    ...
    Quelqu'un aurait une idée pour me sortir de ce problème sur lequel je sèche depuis quelques semaines?

    Merci d'avance pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Bonjour,
    Et que disent ces différents logs que tu as mis (php et js) ? Fais également un console.log de $registrationDiv.data('visibility').
    La soumission du formulaire de signup est en ajax ou bien la page est elle reloadée ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Merci beaucoup pour ton intérêt. Je galère sévère

    Donc, comme tu l'as proposé, j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     console.log('Visibility = ' + $registrationDiv.data('visibility'));
    dans mon app.js.

    Voici ce que donne les logs.

    Au premier appel de la page :

    Visibility = 0
    Before display
    Au clic sur le bouton "SIGN UP" et donc à l'affichage du formulaire en mode modal, pas de changement.

    Après la soumission du formulaire et donc du reload (non ajax) de la page, voici les logs :

    Visibility = 0
    Before display
    Le formulaire n'est pas automatiquement ré-affiché.

    Si je clique sur le bouton "SIGN UP", le formulaire se ré-affiche sans log supplémentaire :

    Nom : Capture.JPG
Affichages : 413
Taille : 26,7 Ko

    Si je re-soumets le formulaire, la page est reloadée avec toujours les même logs :

    Visibility = 0
    Before display

  4. #4
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Il semble donc que la variable 'errorFomRegistration' ne soit pas ajoutée à la session.
    Le log dans le else lorsque le formulaire n'est pas valide permet bien de voir cette nouvelle variable de session ?

    Je suggère aussi de ne pas passer le parametre de request à cet endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ render(controller('App\\Controller\\security\\SecurityController::registration', {'request': app.request})) }}

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Encore merci pour ton aide.

    Pour répondre à ta question, c'est oui. Lorsque je clique sur "SIGN UP" afin de ré-afficher le formulaire, j'ai ceci :

    Nom : Capture.JPG
Affichages : 413
Taille : 19,0 Ko

    La variable est donc bien mise en session, selon moi.

    Je n'avais pas fait attention à ta suggestion de modification dans Twig (paramètre request). J'avais déjà tenté, mais je pense que ça me provoquait une erreur. Je retente cela et je reviens vers toi.

  6. #6
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    En se basant sur les bouts de code fournis ça devrait fonctionner...
    Sinon fais la soumission du formulaire en ajax, comme ça plus de problème de ré-ouverture de modale.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    J'ai effectué à nouveau le test sans le passage du paramètre request. Dans ce cas, même si j'encode des données erronées, je n'ai pas d'erreur remontée dans la console ni d'erreur lors du ré-affichage du formulaire :

    1. Appel du formulaire

    Nom : Capture1.JPG
Affichages : 418
Taille : 9,1 Ko

    2. Complétion du formulaire avec des données non valide :

    Nom : Capture2.JPG
Affichages : 416
Taille : 56,6 Ko

    3. Soumission du formulaire

    Nom : Capture3.JPG
Affichages : 413
Taille : 9,3 Ko

    4. Reload de la page et console sans erreur :

    Nom : Capture.JPG
Affichages : 419
Taille : 19,7 Ko

    5. Ré-appel du formulaire qui ne contient plus de donnée et n'affiche donc plus non plus d'erreur :

    Nom : Capture.JPG
Affichages : 417
Taille : 52,9 Ko

  8. #8
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Peux tu poster le contenu complet de la fonction registration du SecurityController stp ?

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Salut et encore merci pour ton investissement

    Voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
        /**
         * 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->session->set('errorFomRegistration', false);
     
            $administrator = $userRepository->findOneBy(array('name' => 'administrator'));
     
            $user = new User;
     
            $isAdmin = false;
     
            if($authChecker->isGranted('ROLE_ADMIN'))
            {
     
                $isAdmin = true;
     
            }
     
            if(! $shortForm)
            {
     
                $form = $this->createForm(UserType::class, $user, array(
                                                                            'isAdmin' => $isAdmin, 
                                                                            'roles' => $this->getParameter('security.role_hierarchy.roles')
                                                                       )
                                         )
                ;
                $template = 'security/registration.html.twig';
     
            }
            else 
            {
     
                $form = $this->createForm(ShortRegistrationType::class, $user);
                $template = 'security/shortRegistration.html.twig';
     
            }
     
            $form->handleRequest($request);
     
            if ($form->isSubmitted())
            {
     
                 if ($form->isValid())
                {
     
                    $password = $user->getPassword();
     
                    $hash = $encoder->encodePassword($user, $password);
     
                    $user->setPassword($hash);  
     
                    if (! $isAdmin)
                    {
     
                        $user->setRoles(['ROLE_USER']);
     
                    }
     
                    $manager->persist($user);
                    $manager->flush(); 
     
                    $mail = new Mail;
     
                    $mail->setReceiver($user)
                         ->setSubject($this->getParameter('registration_email_subject'))
                         ->setSender($administrator)
                         ->setMessage('Account creation')
                         ->setBody($this->renderView(
                                                        'security/registrationEmail.html.twig', 
                                                        ['user' => $user]
                                                    )
                                  )
                    ;
     
                    if ($mail->sendEmail($mailer))
                    {                
     
                        $manager->persist($mail);
                        $manager->flush();
     
                        $this->addFlash('success', "An email was sent to the completed email address to activate your account.");
     
                    }
                    else
                    {
     
                        $this->addFlash('danger', "An email could not be sent to the completed email address to activate your account.");
     
                    }
     
                }
                else 
                {
     
                    $this->session->set('errorFomRegistration', true);
                    \dump($this->session->get('errorFomRegistration'));
     
                }
     
            }
     
            return $this->render($template, array(
                                                    'current_menu' => 'registration',
                                                    'bodyId' =>  'userRegistration',
                                                    'form' => $form->createView()
                                                 )
                                )
            ;
     
        }

  10. #10
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Je pense que l'erreur vient du placement de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $session->set('errorFomRegistration', false);
    tout au début de la fonction.
    Si tu déplaçais cette ligne dans le if du $form->isValid() ça devrait mieux se passer.

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Etant donné que $form doit être disponible et que le formulaire doit être soumis pour vérifier sa validité, j'ai placé le set de la variable de session à cet endroit (en ayant pris soin de la supprimer en début de fonction) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
            $form->handleRequest($request);
     
            if ($form->isSubmitted())
            {
     
                if ($form->isValid())
                {
    ...
    Cependant, ça n'a pas réglé le problème.

    Ce que je ne comprends pas, c'est que mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     \dump($this->session->get('errorFomRegistration'));
    m'affiche bien
    true
    dans mon formulaire d'inscription (après avoir cliquer sur "SIGN UP" pour l'afficher), mais que c'est la lecture de la session dans Twig qui à l'air de ne pas fonctionner :

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        {% if app.session.get('errorFomAuthentication') %}
          <div id="loginModal" class="modal fade" role="dialog" data-visibility='1'>
        {% else %}

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Bon, apparemment, le problème viendrait effectivement du template Twig car, dans mon fichier 'base.html.twig', j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ dump(app.session) }}
    Le résultat obtenu est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    C:\cmder\roadtrip\vendor\twig\twig\src\Extension\DebugExtension.php:61:
    object(Symfony\Component\HttpFoundation\Session\Session)[502]
      protected 'storage' => 
        object(Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage)[504]
          protected 'bags' => 
            array (size=2)
              'attributes' => 
                object(Symfony\Component\HttpFoundation\Session\SessionBagProxy)[484]
                  ...
              'flashes' => 
                object(Symfony\Component\HttpFoundation\Session\SessionBagProxy)[497]
                  ...
          protected 'started' => boolean true
          protected 'closed' => boolean false
          protected 'saveHandler' => 
            object(Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy)[506]
              protected 'handler' => 
                object(Symfony\Component\HttpFoundation\Session\Storage\Handler\StrictSessionHandler)[480]
                  ...
              protected 'wrapper' => boolean false
              protected 'saveHandlerName' => string 'user' (length=4)
          protected 'metadataBag' => 
            object(Symfony\Component\HttpFoundation\Session\Storage\MetadataBag)[505]
              private 'name' => string '__metadata' (length=10)
              private 'storageKey' => string '_sf2_meta' (length=9)
              protected 'meta' => 
                array (size=3)
                  ...
              private 'lastUsed' => int 1579703697
              private 'updateThreshold' => int 0
          private 'emulateSameSite' => string 'lax' (length=3)
      private 'flashName' => string 'flashes' (length=7)
      private 'attributeName' => string 'attributes' (length=10)
      private 'data' => 
        array (size=2)
          '_sf2_attributes' => 
            array (size=13)
              'errorFomAuthentication' => boolean false
              '_csrf/authenticate' => string 'rOXZ1BclwPoDu6fvaAEf1r9cN7pdOs7yon0TvxO7bnQ' (length=43)
              'errorFomRegistration' => boolean false
              '_csrf/user' => string 'AjUGzE0--jN-JhvFTEs3y6p_clOmKIhHcJLdhcx_670' (length=43)
              'userAddress' => string 'Rue de Mont 63, 5530 Yvoir, Belgique' (length=36)
              'userLatitude' => string '50.3486973' (length=10)
              'userLongitude' => string '4.8781972' (length=9)
              'userCity' => string 'Yvoir' (length=5)
              'userCountryCode' => string 'BE' (length=2)
              '_csrf/delete4' => string 'vFQPvG2rfBQj-TfDAXf6I85khRajPD1PoMR5JVQmD-c' (length=43)
              '_csrf/delete1' => string 'No5fJXlt9gHyBBbraZbeWzcjh1lIkakpapKgOKtI8hk' (length=43)
              '_csrf/delete2' => string 'IZi3k7_4G6hpkN82Rg0ZQeT8kLg9yfN-9degmh3kKyM' (length=43)
              '_csrf/delete3' => string 'h2A4MMKpzJuGyccXsJyH61Mdbh_dP0hJoTWUzwTghzo' (length=43)
          '_symfony_flashes' => 
            array (size=0)
              empty
      private 'usageIndex' => int 7
    Je n'y retrouve pas ma variable de session 'errorFomAuthentication'.

    Je me demande si mon template est bien rechargé après le submit...

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Bon, finalement, j'ai dû résoudre ceci d'une manière que je ne trouve pas très optimale : à chaque chargement du template, je vérifie si la variable de session est à true. Si c'est le cas, je simule un clic sur le bouton "SIGN UP", la fonction .modal('show') me mettant le template en arrière-plan mais ne m'affichant pas le formulaire.

    Dans mon Twig :

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
          <div id="registrationModal" class="modal fade" role="dialog">
            <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>

    Dans mon controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
        public function registration(bool $shortForm = false, Request $request, EntityManagerInterface $manager, UserPasswordEncoderInterface $encoder, 
                                      AuthorizationCheckerInterface $authChecker, \Swift_Mailer $mailer, UserRepository $userRepository): Response
        {
     
            $this->session->set('errorFomRegistration', false);
            $this->session->set('mailSent', 'Initialisation');
    ...
            $form->handleRequest($request);
     
            if ($form->isSubmitted())
            {
     
                if ($form->isValid())
                {
    ...
                }
                else 
                {
     
                    $this->session->set('errorFomRegistration', true);
     
                }
     
            }
    ...
    Dans mon javascript :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    $(window).on('load', function() {
     
      var getRegistrationFormErrors = async function()
                                      {
     
                                        var response = await getAjax(Routing.generate('security.RegistrationForm.errors.get'));
     
                                        return response;
     
                                      }
      ;
     
      getRegistrationFormErrors().then(function(response)
                                       {
     
                                          var jsonData = JSON.parse(response);
                                          console.log(response);
     
                                          if (jsonData['errorFomRegistration']) 
                                          {
     
                                            $("#userRegistrationForm").modal('show');
                                            $("#call_registration_modal_btn").click();
     
                                          }
     
                                          if (jsonData['mailSent'] == 'OK') 
                                          {
     
                                            $("#mailStatusDiv").append("An email was sent to the completed email address to activate your account.");
                                            $("#mailStatusSection").show();
     
                                          }
                                          if (jsonData['mailSent'] == 'NOK') 
                                          {
     
                                            $("#mailStatusDiv").append("An email could not be sent to the completed email address to activate your account.");
                                            $("#mailStatusSection").show();
     
                                          }                                                                            
     
                                       }
                                      )
                                 .catch(function(error)
                                        {
     
                                            console.error("Error during the ajax call to get if there are registartion form errors", error);
     
                                        }
                                       )
      ;
     
    });

    Le traitement ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        /**
         * Get if there are registartion form errors
         * 
         * @Route("/security/RegistrationForm/errors/get", options={"expose"=true}, name="security.RegistrationForm.errors.get")
         *
         * @param Request $request
         * 
         * @return Response
         */
        public function ajaxAction(Request $request): Response
        {
     
            $errorFomRegistration = $this->session->get('errorFomRegistration');
            $mailSent = $this->session->get('mailSent');
     
            $response = new JsonResponse();
     
            $response->setData(array('errorFomRegistration' => $errorFomRegistration, 'mailSent' => $mailSent)); 
     
            return $response;
     
        }
    Bon, je n'aime vraiment pas cette solution car elle lance une requête ajax à chaque chargement d'une des pages de mon site (même quand ce n'est pas utile), mais je n'ai pas trouvé d'autre manière de faire...

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2008, 18h31
  2. variable de session vide
    Par Chikh001 dans le forum Langage
    Réponses: 3
    Dernier message: 31/03/2008, 10h31
  3. variable de session vide
    Par khamett dans le forum Langage
    Réponses: 1
    Dernier message: 16/10/2007, 21h31
  4. Variable de session vide
    Par lelapinou dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2007, 18h24
  5. Variables de session vides !
    Par juliotte dans le forum Langage
    Réponses: 12
    Dernier message: 11/08/2006, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo