2013-07-18 50 views
1

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

...所以我應該用兩個同樣的方法?

回答

7

隨着$this->getUser()只是shortcut

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

因此,這意味着您可以根據當前的安全令牌獲取用戶對象。當你想要檢索實際登錄的用戶時,它非常完美和簡單。

但是,如果您想獲得其他用戶,fos_user.user_manager是您的選擇,因爲它具有方便查找用戶和隱藏實施的方法。它還提供了創建新用戶和更新它們的方法。而且,如果您使用$this->getUser()檢索當前登錄的用戶並對其進行了修改,則應該使用fos用戶管理器來更新它們。看看docs瞭解更多!

+0

Patrik Karisch非常好的解釋:) –

1

這兩者不同在於保存用戶或創建新用戶。如果使用FOSUserBundle,則應始終使用$this->get('fos_user.user_manager')方法。這使您可以訪問與FOSUserBundle配合使用的updateUser()函數,以確保它更新您不需要在用戶模型中明確聲明的所有用戶屬性,如date_createdroles

該功能不同於使用Doctrine至persist(),然後flush()該模型。

2

它們返回不同的對象。 $this->get('fos_user.user_manager')返回FOS\UserBudle\Doctrine\UserManager對象,$this->getUser()返回FOS\UserBundle\Model\User對象。前者處理用戶,後者則是用戶。所以不,你正確地使用它。

+0

根據他發佈的最後一部分,我認爲他知道第一個直接提取服務而不是用戶。 – althaus