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 :

afficher un message lors de l'authentification réussie, lorsqu'on est pas dans un controller


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 279
    Par défaut afficher un message lors de l'authentification réussie, lorsqu'on est pas dans un controller
    Bonjour,

    j'apprends symfony 5 ( 5.3 ) et je tente de comprendre la sécurité:
    j'essaye l'authentification ( make:auth ).

    Pour l'instant ( avec mon petit niveau ), tout fonctionne ( je n'ai fait que renseigner la route pour la connexion ! ).
    Mais j'aimerais afficher un message lors de la connexion. Je sais le faire dans un controller, mais j'imaginais le faire dans cette fonction là:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
        {
     
            // mon message flash
            if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) {
                return new RedirectResponse($targetPath);
            }
     
            return new RedirectResponse($this->urlGenerator->generate('app_home'));
     
            throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
        }

    de mon entité LoginFormAuthenticator.php
    j'avias vu sur un tuto quelque chose comme :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $request->getSession()->getFlasBag()->add('authentification réussie');

    À la place de "mon message flash". Mais il n'y a pas (plus ? ) de fonction getFlasBag() pour un objet Request

    Donc pour résumer: comment faire , suis-je sur la bonne piste ?
    Merci

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Je ne suis pas spécialiste Symfony mais d'après la doc que je lis, les Flash Messages existent toujours :
    https://symfony.com/doc/current/cont...flash-messages
    https://symfony.com/doc/current/comp...flash-messages

    Comme il est écrit dans le premier lien : Dans un controller, $this->addFlash() est l'équivalent de $request->getSession()->getFlashBag()->add().


    Il faut donc écrire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    // mon message flash
    $this->addFlash('notice', "Connexion réussie !");

    Et ajouter son affichage dans la vue :

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {# read and display just one flash message type #}
    {% for message in app.flashes('notice') %}
        <div class="flash-notice">
            {{ message }}
        </div>
    {% endfor %}

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 279
    Par défaut
    bonjour,

    justement, dans ce cas précis, je ne suis pas dans un controller !!
    d'où la question, comment fait-on ?
    car $request->getSession()->getFlashBag()->add() ne fonctionne pas. symfony ne trouve pzas la fonction getFlashBag() .

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 279
    Par défaut
    autre exemple:
    dans un eventSubscriber, j'ai fait un dd($event->getRequest()->getSession());le résultat:
    Code php : 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
     
    LogoutEventSubscriber.php on line 22:
    Symfony\Component\HttpFoundation\Session\Session {#240 ▼
      #storage: Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage {#238 ▼
        #bags: array:2 [▼
          "attributes" => Symfony\Component\HttpFoundation\Session\SessionBagProxy {#281 ▶}
          "flashes" => Symfony\Component\HttpFoundation\Session\SessionBagProxy {#283 ▼
            -bag: Symfony\Component\HttpFoundation\Session\Flash\FlashBag {#282 ▼
              -name: "flashes"
              -flashes: &3 []
              -storageKey: "_symfony_flashes"
            }
            -data: &2 array:2 ["_sf2_attributes" => &1 []
              "_symfony_flashes" => &3 []
            ]
            -usageIndex: &4 8
            -usageReporter: array:2 [0 => Symfony\Component\HttpKernel\EventListener\SessionListener {#112 ▶}
              1 => "onSessionUsage"
            ]
          }
        ]
        #started: true
        #closed: false
        #saveHandler: Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy {#277 ▶}
        #metadataBag: Symfony\Component\HttpFoundation\Session\Storage\MetadataBag {#193 ▶}
        -emulateSameSite: null
      }
      -flashName: "flashes"
      -attributeName: "attributes"
      -data: &2 array:2 []
      -usageIndex: &4 8
      -usageReporter: array:2 []
    }

    il doit bien y avoir un moyen d'accéder à une méthode pour mettre un flashMessage (à la place de dd) mais j'avoue que je me perds un peu avec mon niveau de débutant !
    la méthode getFlashBag() n'existe pas , sûr. Mais quelle méthode alors ?

  5. #5
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Ca m'a pris 1h mais je crois avoir trouvé.

    Pour pouvoir utiliser $request->getSession()->getFlashBag()->add('notice', 'test de message flash !!');; il faut indiquer au fichier d'utiliser la class des FlashMessage
    Pour tester, j'ai ajouté use Symfony\Component\HttpFoundation\Session\Flash\AutoExpireFlashBag; en haut de fichier et ça fonctionne

Discussions similaires

  1. Afficher un message lors du passage de la souris sur un element de combobox
    Par rampage92 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/05/2017, 17h15
  2. Réponses: 0
    Dernier message: 04/11/2011, 16h18
  3. Afficher un message lors du chargement de la page
    Par Dakuan dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/08/2008, 17h45
  4. Afficher un message d'alerte dès que la sixième case est cochée
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/01/2007, 17h03
  5. Réponses: 18
    Dernier message: 12/06/2006, 09h39

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