2013-07-10 5 views
0

Я новичок в Symfony2, я пытаюсь переопределить контроллер, используя услугу внутриДоступа к переопределению FOS пользователь Bundle контроллера

Это контроллер

class RegistrationController extends BaseController 
{ 
    public function registerAction(Request $request) 
    { 
    /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */ 
    $formFactory = $this->container->get('fos_user.registration.form.factory'); 
    /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */ 
    $userManager = $this->container->get('fos_user.user_manager'); 
    /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */ 
    $dispatcher = $this->container->get('event_dispatcher'); 

    $user = $userManager->createUser(); 
    $user->setEnabled(true); 

    $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, new UserEvent($user, $request)); 

    $form = $formFactory->createForm(); 
    $form->setData($user); 

    if ('POST' === $request->getMethod()) { 
     $form->bind($request); 

     if ($form->isValid()) { 
      $event = new FormEvent($form, $request); 
      $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); 

      $userManager->updateUser($user); 

      if (null === $response = $event->getResponse()) { 
       $url = $this->container->get('router')->generate('easy_app_user_profile'); 
       $response = new RedirectResponse($url); 
      } 

      $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); 

      //create UserInfo 
      $doctrine = $this->container->get('doctrine'); 

      $userInfo = new UserInformation(); 
      $userInfo->setUser($user); 

      //save the userInfo 
      $em = $doctrine->getManager(); 
      $em->persist($userInfo); 
      $em->flush(); 

      //add user first login 
      $loginManager = $this->get('user_login_manager'); 
      $loginManager->saveUser($request, $user); 

      return $response; 
     } 
    } 

    return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.'.$this->getEngine(), array(
      'form' => $form->createView(), 
    )); 
    } 
} 

регистра в конце Я использую

$loginManager = $this->get('user_login_manager'); 
$loginManager->saveUser($request, $user); 

Но я не могу использовать get, потому что это не расширение контроллера. Так что я не знаю, как получить доступ к моей службе в этом контроллере

Благодаря

ответ

1

$this->get('some_service') только вспомогательный ярлык определен в Symfony базового контроллера. Посмотрите на код, указанный выше, и посмотрите, как вызывается все службы:

$loginManager = $this->container->get('user_login_manager'); 

КПП. если вы используете последнюю версию FOSUserBundle (dev-master), то new event system может поместиться лучше, чем переопределение контроллера. REGISTER_COMPLETED может поместиться для вас. Если вы посмотрите на код контроллера выше, вы увидите, когда событие отправлено. Вы должны справедливо использовать события, чем переопределение контроллера.

+0

Спасибо за ваш ответ. Это работает. Я добавляю событие события: «security.interactive_login», но это работает только при входе в систему, а не в регистре, поэтому я добавляю это. Если у вас есть решение, дайте мне знать :) – Ajouve

+0

В новых версиях FOSUserBundle представила собственные события, на которых вы можете слушать. см. ссылку в моем отредактированном ответе –

+0

Спасибо, я нахожу это, я работаю над – Ajouve

Смежные вопросы