2016-11-28 4 views
0

내 프로젝트의 경우 등록 후 사용자를 리디렉션해야합니다.Symfony2 FOSuserBundle 이벤트 REGISTRATION_COMPLETED이 (가) 트리거되지 않았습니다.

내 이벤트 리스너 :

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

그리고 I :

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)); 
    } 
} 

내가 내 service.yml의 서비스로 등록 된 설명으로 그것을 달성하기 위해, 나는 EventListener을 생성 내 RegistrationController 그것을 사용해야하지만 그것을 트리거하는 방법을 이해하지 못합니다. 내 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() 
    )); 
} 

나는 주제도 내가 내 이벤트를 트리거하기 위해 ->dispatch() 함수에 전달할 필요가에 대한 Symfony2 documentation을 이해하지 않습니다.

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 

답변

2

귀하의 리스너가 FOSUserEvents::REGISTRATION_CONFIRM에 가입되어 있지만 FOSUserEvents::REGISTRATION_COMPLETED을 파견하는 것을 선언 : 내 사용자를 등록 할 때

[편집] 나는이 오류가 발생합니다. ,

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

내 나쁜,하지만 난 이미 오류를 가지고 그것을 시도 : 그것을 트리거하려면 당신의 편집에 맞도록 FOSUserEvents::REGISTRATION_CONFIRM 이벤트

에게 편집을 파견 할 필요가, 당신은 당신의 서비스 tags에 이벤트를 전달해야 내 게시물을 업데이트했습니다. (시간 낭비) 죄송합니다. – Gauthier

+1

이 (가) 업데이트 된 오류를 반영하도록 편집되었습니다. – skrilled

+0

감사합니다. 업데이트 해 주셔서 감사합니다. 이벤트가 이제 귀하의 게시물에 설명 된대로 전달되지만 여전히 오류가 있습니다. 나는 그것을 파견하는 방법이 될 수 있다고 생각하지만 여전히, 나는 모른다. – Gauthier