Symfony2 - $ this-> getUser()vs $ this-> get('fos_user.user_manager');

时间:2013-07-18 21:16:09

标签: php symfony fosuserbundle

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

...我应该为两者使用相同的方法吗?

3 个答案:

答案 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()模型不同。