54

我正在使用 Symfony2 和教义 2 开发应用程序。我想知道如何获取当前登录的用户 ID。

4

4 回答 4

139

当前 Symfony 版本(Symfony 4,Symfony >=3.2)

由于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;
    }
}

从 2.6 开始,您仍然可以像在所有 Symfony 版本中一样使用安全令牌存储。例如,在您的控制器中:

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

请注意,不再鼓励使用此答案下一部分中提到的快捷方式。Controller::getUser()

旧版 Symfony 版本

以前访问用户最简单的方法是扩展基本控制器,并使用快捷getUser()方式:

$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 中被删除。

于 2012-05-10T16:18:06.250 回答
17

在 symfony2 中,我们可以通过以下代码来简化:

$id = $this->getUser()->getId();
于 2013-08-25T14:46:40.260 回答
4

您可以使用以下代码获取变量:

$userId = $this->get('security.context')->getToken()->getUser()->getId();
于 2012-11-28T11:05:27.290 回答
0

这可以穿在方法:

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

    return $userId;
}

并归纳 $this->getUserId()

public function example()
{
    print_r($this->getUserId()); 
}
于 2014-12-15T12:34:52.707 回答