2016-11-28 1 views
0

Für mein Projekt muss ich den Benutzer nach der Registrierung umleiten. Um das zu erreichen, habe ich ein EventListener wie unten beschrieben:Symfony2 FOSuserBundle Ereignis REGISTRATION_COMPLETED wird nicht ausgelöst

Mein Event-Listener:

namespace UserBundle\EventListener; 

use FOS\UserBundle\FOSUserEvents; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 

class RegistrationConfirmListener implements EventSubscriberInterface 
{ 
    private $router; 

    public function __construct(UrlGeneratorInterface $router) 
    { 
     $this->router = $router; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::REGISTRATION_CONFIRM => 'onRegistrationConfirm' 
     ); 
    } 

    public function onRegistrationConfirm(GetResponseUserEvent $event) 
    { 
     $url = $this->router->generate('standard_user_registration_success'); 
     $event->setResponse(new RedirectResponse($url)); 
    } 
} 

ich registrierte es als Dienst in meinem service.yml:

services: 
    rs_user.registration_complet: 
     class: UserBundle\EventListener\RegistrationConfirmListener 
     arguments: [@router] 
     tags: 
      - { name: kernel.event_subscriber } 

Und ich Ich muss es in meinem RegistrationController verwenden, aber ich verstehe nicht, wie ich es auslösen soll. Hier in meinem registerAction:

public function registerAction(Request $request) 
{ 
     $em = $this->get('doctrine.orm.entity_manager'); 
     //Form creation based on my user entity 
     $user = new StandardUser(); 
     $form = $this->createForm(RegistrationStandardUserType::class, $user); 
     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $user  ->setEnabled(true); 
      $em   ->persist($user); 
      $em   ->flush(); 
      if ($user){ 
       $dispatcher = $this->get('event_dispatcher'); 
       $dispatcher->dispatch(FOSUserEvents::REGISTRATION_CONFIRM); 
      } 
     } 

    return $this->render('UserBundle:Registration:register.html.twig', array(
      'form' => $form->createView() 
    )); 
} 

Ich verstehe nicht, die Symfony2 documentation über das Thema weder, was ich auf die ->dispatch() Funktion übergeben muß mein Ereignis auszulösen.

[EDIT] Ich erhalte diese Störung, wenn ich meinen Benutzer registrieren:

Type error: Argument 1 passed to 
UserBundle\EventListener\RegistrationConfirmListener::onRegistrationConfirm() 
must be an instance of UserBundle\EventListener\GetResponseUserEvent, 
instance of Symfony\Component\EventDispatcher\Event given 
500 Internal Server Error - FatalThrowableError 

Antwort

2

Ihre Zuhörer erklärt, dass es zu FOSUserEvents::REGISTRATION_CONFIRM abonniert ist, aber Sie sind Dispatching FOSUserEvents::REGISTRATION_COMPLETED. Um es auslösen Sie benötigen ein FOSUserEvents::REGISTRATION_CONFIRM -Ereignisses an

bearbeiten Ihre Schnitt anzupassen, müssen Sie das Ereignis übergeben in Ihre Dienste tags:

- { name: 'kernel.event_subscriber', event: 'fos_user.registration.confirm'} 
+0

Meine schlecht, aber ich habe bereits versucht, es ein eine Fehlermeldung anzeigt, Ich habe meinen Beitrag aktualisiert (Entschuldigung für die Zeitverschwendung) – Gauthier

+1

bearbeitet, um Ihren aktualisierten Fehler zu reflektieren – skrilled

+0

Ok, danke für das Update. Das Ereignis ist jetzt wie in Ihrem Beitrag beschrieben bestanden, aber ich habe immer noch den Fehler. Ich denke, es könnte die Art sein, wie ich es abschicke, aber trotzdem habe ich keine Ahnung ... – Gauthier

Verwandte Themen