簡體   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