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 :

sf 2,6,4 Ajouter un listener sur FOSUser


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 55
    Points : 33
    Points
    33
    Par défaut sf 2,6,4 Ajouter un listener sur FOSUser
    Bonjour,

    Je voudrais ajouter un listener qui déclenche après validation du formulaire d'inscription de FOSUSER

    J'ai donc dans mon bundle UserBundle en parent de FOSUER crée un service
    src\Gallery\UserBundle\Resources\config\services.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    services:
        gallery_user.registration_complet:
            class: Gallery\UserBundle\EventListener\RegistrationListener
            arguments:  [@doctrine.orm.entity_manager]
            tags:    
                 - { name: kernel.event_subscriber  }
    J'importe mon service :
    \app\config\config.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    imports:
    ../..
        - { resource: "@GalleryUserBundle/Resources/config/services.yml" }
    Et donc ci dessous ma classe qui devrait s’exécuter à chaque validation du formulaire d'inscription de FOSUSER
    src\Gallery\UserBundle\EventListener\RegistrationListener.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
    44
    45
    46
    class RegistrationListener implements EventSubscriberInterface
    {
         protected $container;
          protected $em;
     
     
         public function __construct(EntityManager $em)           
        {
             echo 'line ' . __LINE__ . " XXX  " . __FILE__;
              $this->em = $em;
     
        }
     
        public static function getSubscribedEvents()
        {
          echo 'line ' . __LINE__ . " XXX  " . __FILE__;
            return array(
                FOSUserEvents::REGISTRATION_CONFIRMED => 'onRegistrationSuccess',
                FOSUserEvents::REGISTRATION_SUCCESS => 'setRole',
                FormEvents::POST_SUBMIT => 'setRole2'
            );
        }
     
        public function onRegistrationSuccess(\FOS\UserBundle\Event\FormEvent $event)
        {
               echo 'line ' . __LINE__ . " XXX  " . __FILE__;
              die();
        }
     
         public function onKernelController(  $event)
        {
               echo 'line ' . __LINE__ . " XXX  " . __FILE__;
              die();
        }
     
        public function setRole( FormEvent $event)
        {
             echo 'line ' . __LINE__ . " XXX  " . __FILE__;
            die();
       }
        public function  setRole2( FormEvent $event)
        {
            echo 'line ' . __LINE__ . " XXX  " . __FILE__;
            die();
      }
    }
    Donc si je fais php/console container:debug, je trouve bien mon service
    gallery_user.registration_complet Gallery\UserBundle\EventListener\RegistrationListener

    Apparemment le service est bien enregistré,
    le constructeur et onKernelController sont bien exécutés.

    Normalement à chaque validation d'un formation, une des méthodes ajoutées par getSubscribedEvents (onRegistrationSuccess, setRole, setRole2) devrait déclencher non ?
    Cependant aucune de ces méthodes n'est exécutées. L'inscription se déroule doncnormalement et ma méthode qui vise à ajouter un rôle n'est jamais exécutée.

    Mais malgré mes heures et mes jours de recherches je n'arrive à rien ! J'ai oublié quelque chose ou alors?
    Merci pour vos réponses.
    Pi

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Hello,

    Pour le POST_SUBMIT, je dirais qu'il faut que tu ajoutes le listener à ton formBuilder dans le formType.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // FormType
    $builder->addEventListener(FormEvents::POST_SUBMIT, $listener);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 55
    Points : 33
    Points
    33
    Par défaut et le $listener je le trouve où
    et le $listener je le trouve où ?

    j'avais essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $builder->addEventSubscriber(new RegistrationListener( ));
    qui fonctionne,
    mais la il faut trouver EntityManager, request ou équivalent..., pour récupérer les données du formulaire,
    et ça a pas l'air plus évident.
    Le plus simple étant de récupérer ces infos dans le contrôleur, mais le but d'utiliser un écouteur est justement de ne pas toucher au contrôleur.


    Sinon je pourrais prendre un autre évènement REGISTRATION_CONFIRMED ou REGISTRATION_SUCCESS,
    mais aucun ne déclenche.

    Pour l'instant j'ai plus ou moins réglé la question en surchargeant le contrôleur.
    ça marche sans pb,
    mais c'est une demi solution .

    Pi

  4. #4
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Le listener tu peux l'injecter dans ton formtype.

    Tu déclares ton formtype en tant que service, ton listener aussi, et tu injectes le listener dans le formtype.
    Dans le meilleur des cas si ton listener n'a aucune dépendance tu peux aussi directement l'instancier dedans et faire un new object comme tu le fais avec ton subscriber.

    Mais l'idée c'est de déclarer un maximum de classes en tant que service pour pouvoir les injecter à ta guise.

    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
    class MyFormType 
    {
        private $listener;
     
        public function __construct(MyListener $listener) 
        {
            $this->listener = $listener;
        }
     
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->addEventListener(FormEvents::POST_SUBMIT, $this->listener);
        }
    }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 55
    Points : 33
    Points
    33
    Par défaut ça marche

    j'ai encore des pb.

    pb mais c'est la bonne direction direction

    Merci,

    Pi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des Listener sur des objets créés dynamiquement
    Par floctc dans le forum Composants
    Réponses: 10
    Dernier message: 23/04/2010, 16h35
  2. Comment ajouter un listener sur une combobox ?
    Par piero53 dans le forum Débuter
    Réponses: 5
    Dernier message: 18/04/2010, 21h18
  3. Comment ajouter un Listener sur uun object quelconque?
    Par LDPDC dans le forum Général Java
    Réponses: 7
    Dernier message: 27/04/2009, 17h51
  4. JSP: ajouter un listener sur un TreeNode
    Par hurric dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/07/2008, 14h57
  5. Ajouter un listener sur une variable
    Par serwol dans le forum Général Java
    Réponses: 4
    Dernier message: 14/10/2005, 15h39

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