繁体   English   中英

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

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

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

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

使用$this->getUser()只是一个快捷方式

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

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

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

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

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

该函数与使用Doctrine persist()然后flush()模型不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM