Symfony2:使用FOSUserBundle时如何在控制器内获取用户对象?
我正在使用FOSUserBundle对我的用户进行身份验证 我试图让控制器中的用户对象注册一个trip,在保存之前,我应该将用户对象添加到此trip中 我没有找到该如何做,因为我在symfony doc中找到的下一个方法是:Symfony2:使用FOSUserBundle时如何在控制器内获取用户对象?,symfony,fosuserbundle,Symfony,Fosuserbundle,我正在使用FOSUserBundle对我的用户进行身份验证 我试图让控制器中的用户对象注册一个trip,在保存之前,我应该将用户对象添加到此trip中 我没有找到该如何做,因为我在symfony doc中找到的下一个方法是: $user = $this->container->get('security.context')->getToken()->getUser(); 将用户名呈现为字符串,但我需要整个对象 目前,我使用这种方法,但它不能正常工作 $username
$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);
如何正确执行此操作?getUser方法的文档指出: 返回实现_toString()的对象,或返回原语字符串 如果我们查看上面的
FOS\UserBundle\Model\User
类(FOSUserBundle使用的基本用户类),我们可以看到它确实有一个\u toString
方法:
public function __toString()
{
return (string) $this->getUsername();
}
我认为您实际上得到了用户
对象,但由于它实现了\uuu toString
方法,因此可以直接在模板中呈现
在Twig中,您可以使用:
{{ dump(user) }}
看看你有什么样的东西。但实际上您使用的是对象,而不是字符串。我认为这是正确的。您已经拥有用户对象
在Symfony>2.1.x中,也可以使用
$this->getUser();
在控制器内部 解决方案:
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->findUserByUsername($this->container->get('security.context')
->getToken()
->getUser())
我也有同样的问题,为了解决这个问题,请在您的使用部分添加FOS类,即:
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Model\UserInterface;
在FOSUser 1.3中,您不能在SecurityController中直接调用
$this->getUser
您必须调用$this->container->get('security.context')->getToken()->getUser()代码>
这就足够访问用户对象了。
无需调用$user=$em->getRepository('siteUtisulateUrbundle:Utisulateur')->find($username)代码>
此外,您的find
方法会自动并隐式地将初始$username对象转换为字符串,因为它不会等待对象作为参数。对于FOSUser ^1.3,您可以从扩展BaseController的控制器中获取当前用户,如下所示:
$user = $this->container->get('security.token_storage')->getToken()->getUser();
在symfony>=3.2中,声明:
获取控制器中当前用户的另一种方法是
键入带有提示的控制器参数(并将其设置为默认值)
如果登录是可选的,则为null):
这只推荐给没有扩展经验的开发人员
从开始,不要使用
任何一个否则,建议继续使用getUser()
捷径
关于它公共函数索引()
{
/*@var$user\FOS\UserBundle\Model\UserInterface*/
如果($user=$this->getUser())
{
回声';
打印(用户);
print_r($user->getRoles());//方法使用示例
出口
返回$this->redirectToRoute(“仪表板”);
}
返回$this->redirectToRoute('login');
}
显然,它的功能与内置方法getUser()完全相同
use Symfony\Component\Security\Core\User\UserInterface\UserInterface;
public function indexAction(UserInterface $user = null)
{
// $user is null when not logged-in or anon.
}
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');
}