2

我正在使用 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'));

...所以我应该对两者都使用相同的方法吗?

4

3 回答 3

9

with$this->getUser()只是一个捷径

$this->get('security.context')->getToken()->getUser()

所以这意味着您根据当前的安全令牌获取用户对象。当您想要检索实际登录的用户时,它完美而简单。

但是,如果您想获得其他用户,fos_user.user_manager则可以选择,因为它具有轻松找到用户并将实现隐藏在后面的方法。它还提供了创建新用户和更新他们的方法。此外,如果您检索当前登录的用户$this->getUser()并对其进行修改,您应该使用 fos 用户管理器来更新它们。查看文档以获取更多信息!

于 2013-07-18T21:30:43.187 回答
2

他们返回不同的对象。$this->get('fos_user.user_manager')返回一个FOS\UserBudle\Doctrine\UserManager对象并$this->getUser()返回一个FOS\UserBundle\Model\User对象。前者处理用户,后者是用户。所以不,你用对了。

于 2013-07-18T21:28:17.797 回答
1

两者的不同之处在于保存用户或创建新用户。如果使用 FOSUserBundle,则应始终使用该$this->get('fos_user.user_manager')方法。这使您可以访问updateUser()与 FOSUserBundle 一起使用的函数,以确保它更新您不需要在 User 模型中显式声明的所有用户属性,例如date_createdroles

该功能与使用 Doctrinepersist()flush()模型不同。

于 2013-07-18T21:22:42.257 回答