2012-05-10 168 views
42

我正在開發一個使用Symfony2和原則2的應用程序。我想知道如何獲取當前登錄的用戶ID。Symfony2獲取登錄用戶的ID

+0

在symfony2.1控制器中,您可以通過調用$ this-> getUser()來獲取用戶。我認爲這個版本的symfony是新的。 – PMoubed

回答

112

當前的Symfony版本(Symfony的4,Symfony的> = 3.2)

Since Symfony >=3.2你可以簡單地指望UserInterface實現直接注射到你的控制器動作。然後,您可以撥打getId()檢索用戶的標識:

class DefaultController extends Controller 
{ 
    // when the user is mandatory (e.g. behind a firewall) 
    public function fooAction(UserInterface $user) 
    { 
     $userId = $user->getId(); 
    } 

    // when the user is optional (e.g. can be anonymous) 
    public function barAction(UserInterface $user = null) 
    { 
     $userId = null !== $user ? $user->getId() : null; 
    } 
} 

,您仍然可以使用安全令牌存儲在所有Symfony的版本,因爲2.6。例如,在你的控制器:

$user = $this->get('security.token_storage')->getToken()->getUser(); 

注意在這個答案的下一部分中提到的Controller::getUser()快捷方式的Symfony 3已被棄用,在Symfony的取出4.0

傳統Symfony的版本

訪問用戶的最簡單方法是擴展基礎控制器,並使用快捷方式getUser()方法(在Symfony 4中刪除):

$user = $this->getUser(); 

由於Symfony的2.6你可以從安全令牌存儲用戶:

$user = $this->get('security.token_storage')->getToken()->getUser(); 

Symfony的2.6之前,該令牌是由安全上下文服務,而不是訪問:

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

請注意,安全上下文服務在Symfony 2中被棄用,並且在Symfony 3.0中被刪除。

+2

很好的答案。要**從用戶對象**,如電子郵件,名字或性別獲得其他領域。像這樣使用。爲了獲得性別,**回聲'性別是:'。 $ user-> getGender(); ** – webblover

+0

從版本2.6開始棄用,在3.0中刪除。 ! – Zagloo

2

你可以用下面的代碼的變量:

$userId = $this->get('security.context')->getToken()->getUser()->getId(); 
+1

不好的做法,變量名應該是'$ userId' – GusDeCooL

13

在Symfony2中,我們可以得到這個代碼的簡單:

$id = $this->getUser()->getId(); 
0

這可以穿好衣服的方法:

/** 
* Get user id 
* @return integer $userId 
*/ 
protected function getUserId() 
{ 
    $user = $this->get('security.context')->getToken()->getUser(); 
    $userId = $user->getId(); 

    return $userId; 
} 

and induction $ this-> getUserId()

public function example() 
{ 
    print_r($this->getUserId()); 
}