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:
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:
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:
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
et le $listener je le trouve où
et le $listener je le trouve où ?
j'avais essayé ça :
Code:
$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