FOSUserBundle编辑用户无法正常工作

时间:2016-02-10 07:36:01

标签: php symfony fosuserbundle

我正在使用带有FOSUserBundle的Symfony2,我遇到的问题是编辑用户帐户,当我尝试编辑特定用户帐户时,检索到的用户信息是正确的但是当我尝试更新检索到的用户信息时,当前记录的帐户将是正在编辑的帐户而不是检索到的用户帐户,怎么可能?我的代码出了什么问题?

ProfileController: //编辑用户

public function editUserAction($id, Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $user = $em->getRepository('MatrixUserBundle:User')->find($id);

        if (!is_object($user)) {
            throw new AccessDeniedException('This user does not have access to this section.');
        }

        /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
        $formFactory = $this->get('fos_user.profile.form.factory');

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

        if ($form->isValid()) { 
            /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */

            $userManager = $this->get('fos_user.user_manager');
            $userManager->updateUser($user); 

            $session = $this->getRequest()->getSession();
            $session->getFlashBag()->add('message', 'Successfully updated'); 
            $url = $this->generateUrl('matrix_edi_viewUser'); 
            $response = new RedirectResponse($url); 
        }

        return $this->render('FOSUserBundle:Profile:edit.html.twig', array(
            'form' => $form->createView()
        ));
    }

1 个答案:

答案 0 :(得分:0)

在正确更新给定用户后,您将返回重定向到自定义路由。

我猜路线matrix_edi_viewUser是对原始FOSUB\ProfileController::showAction的覆盖。

此外,您必须创建一个特定的showUserAction并将更新的用户作为参数传递给它 以下代码应该有效:

public function showUserAction($id)
{
    $user = $em->getDoctrine()
        ->getManager()
        ->getRepository('MatrixUserBundle:User')
        ->find($id);

    if (!is_object($user)) {
        throw new AccessDeniedException('This user does not have access to this section.');
    }

    return $this->render('FOSUserBundle:Profile:show.html.twig', array('user' => $user));
}

路线:

matrix_edi_viewUser:
    path:     /users/{id}/show
    defaults: { _controller: MatrixUserBundle:Profile:showUser }

在您的editAction中,将重定向更改为:

$url = $this->generateUrl('matrix_edi_viewUser', array('id' => $user->getId()); 
$response = new RedirectResponse($url);

现在,show中显示的用户信息将是更新用户的信息。