2012-05-10 130 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()); 
}