Symfony2:如何在使用FOSUserBundle时在控制器内获取用户对象?

sko*_*oft 36 symfony fosuserbundle

我正在使用FOSUserBundle来验证我的用户.

我正在尝试获取Controller内的用户对象来注册一个行程,我应该在保存之前将用户对象添加到此Trip.

我没有找到如何做到这一点因为我在symfony doc中找到它的下一个方法:

$user = $this->container->get('security.context')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)

将用户名呈现为字符串,但我需要整个对象.

目前,我使用此方法,但它无法正常工作.

$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确地做到这一点?

Moh*_*nam 72

我认为拉蒙是对的.您已拥有用户对象.

同样在Symfony> 2.1.x中你可以使用

$this->getUser();
Run Code Online (Sandbox Code Playgroud)

在控制器内部.


Ram*_*iss 15

getUser方法的文档指出:

要么返回实现__toString()的对象,要么返回原始字符串.

如果我们在这里查看FOS\UserBundle\Model\User类(FOSUserBundle使用的基本用户类),我们可以看到它确实有一个方法:__toString

public function __toString()
{
    return (string) $this->getUsername();
}
Run Code Online (Sandbox Code Playgroud)

我认为你实际上得到了User对象,但因为它实现了一个__toString方法,所以它可以直接在模板中呈现.

在Twig中你可以使用:

{{ dump(user) }}
Run Code Online (Sandbox Code Playgroud)

要查看您拥有的对象类型.但你实际上是在使用一个对象,而不是一个字符串.


小智 9

解:

$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->findUserByUsername($this->container->get('security.context')
                    ->getToken()
                    ->getUser())
Run Code Online (Sandbox Code Playgroud)

  • 显然它与内置方法getUser()完全相同 (5认同)