dtxpz8785 2013-07-10 07:32
浏览 23
已采纳

访问服务覆盖FOS用户捆绑控制器

I'm new in Symfony2, I'm trying to override a controller using a service inside

This is the register controller

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

near the end I'm using

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

But I can't use get because this is not extending Controller. So I don't know how to access to my service in this controller

Thanks

  • 写回答

1条回答 默认 最新

  • dpcj32769 2013-07-10 07:38
    关注

    $this->get('some_service') is only a helper shortcut defined in the symfony base controller. Look at you code above and see how all the services are called:

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

    Btw. if you are using the latest version of FOSUserBundle (dev-master), then the new event system might fit better than overriding the controller. REGISTER_COMPLETED may fit for you use case. If you take a look in the controller code above, you can see, when the event is dispatched. You should fairly use events than controller overriding.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 python变量和列表之间的相互影响
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)