我正在使用FOSUserBundle。这两者有什么区别?
$this->get('fos_user.user_manager');
...和...
$this->getUser();
我发现我在不同的时间使用了上述两种方法,一切正常。
我猜第一个是来自FOS而第二个是默认的,但我猜我应该总是使用同一个。
这是我用过的一段代码:
$user = $this->getUser();
if($user) {
$email = $user->getEmail();
} else {
$email = "no email";
}
..和另一个......
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserBy(array('memberID' => '123'));
...我应该为两者使用相同的方法吗?
答案 0 :(得分:9)
$this->getUser()
只有shortcut到
$this->get('security.context')->getToken()->getUser()
因此,这意味着您将根据当前安全令牌获取用户对象。当您想要检索实际登录用户时,这是完美而简单的。
但是如果你想获得其他用户,fos_user.user_manager
是你的选择,因为它有方法可以轻松找到用户并隐藏实现。它还提供了创建新用户和更新用户的方法。此外,如果您使用$this->getUser()
检索当前登录的用户并对其进行了修改,则应使用fos用户管理器更新它们。请查看docs以获取更多信息!
答案 1 :(得分:2)
他们返回不同的对象。 $this->get('fos_user.user_manager')
返回FOS\UserBudle\Doctrine\UserManager
个对象,$this->getUser()
返回FOS\UserBundle\Model\User
个对象。前者处理用户,后者是用户。所以不,你正在使用它。
答案 2 :(得分:1)
两者的不同之处在于保存用户或创建新用户。如果使用FOSUserBundle,则应始终使用$this->get('fos_user.user_manager')
方法。这使您可以访问与FOSUserBundle一起使用的updateUser()
函数,以确保它更新您不需要在用户模型中明确声明的所有用户属性,例如date_created
和{{1 }}
该功能与使用Doctrine到roles
然后persist()
模型不同。