我正在使用FOSUserBundle来验证我的用户。
我正在尝试获取Controller中的用户对象以注册一个行程,我应该在保存之前将用户对象添加到此Trip。
我没有找到怎么做,因为我在symfony doc中找到了下一个方法:
$user = $this->container->get('security.context')->getToken()->getUser();
将用户名呈现为字符串,但我需要整个对象。
目前,我使用此方法,但它无法正常工作。
$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);
我怎样才能正确地做到这一点?
答案 0 :(得分:71)
答案 1 :(得分:15)
getUser
方法的文档表明:
返回一个实现__toString()的对象,或者返回一个原始字符串。
如果我们查看FOS\UserBundle\Model\User
类here(FOSUserBundle使用的基本用户类),我们可以看到它确实有__toString
方法:
public function __toString()
{
return (string) $this->getUsername();
}
我认为您实际上获得了User
对象,但因为它实现了__toString
方法,所以它可以直接在模板中呈现。
在Twig中你可以使用:
{{ dump(user) }}
要查看您拥有的对象类型。但你实际上是在使用一个对象,而不是一个字符串。
答案 2 :(得分:9)
解决方案:
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->findUserByUsername($this->container->get('security.context')
->getToken()
->getUser())
答案 3 :(得分:3)
在FOSUser 1.3中,您无法直接在SecurityController中调用$this->getUser
。
您必须致电$this->container->get('security.context')->getToken()->getUser();
这足以访问用户对象。
无需致电$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);
此外,您的find
方法会自动并隐式地将您的初始$ username对象强制转换为字符串,因为它不会将对象作为参数等待。
答案 4 :(得分:2)
我有同样的问题,要解决它在你的使用部分添加FOS类,即:
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Model\UserInterface;
答案 5 :(得分:2)
在symfony> = 3.2中,documentation表示:
在控制器中获取当前用户的另一种方法是 type-hint控制器参数UserInterface(并默认为 如果登录是可选的,则为null):
<ProjectReference Include=”… foo.csproj”> <ReferenceOutputAssembly>false</ReferenceOutputAssembly> </ProjectReference>
仅适用于未扩展的有经验的开发人员 来自Symfony base controller并且不使用ControllerTrait 无论是。否则,建议继续使用getUser() 快捷方式。
答案 6 :(得分:0)
对于FOSUser ^ 1.3,您可以从扩展BaseController的控制器中获取当前用户,如下所示:
$user = $this->container->get('security.token_storage')->getToken()->getUser();
答案 7 :(得分:0)
public function indexAction()
{
/* @var $user \FOS\UserBundle\Model\UserInterface */
if ($user = $this->getUser())
{
echo '<pre>';
print_r($user);
print_r($user->getRoles()); // method usage example
exit;
return $this->redirectToRoute('dashboard');
}
return $this->redirectToRoute('login');
}