Symfony登录用户的id

时间:2012-05-10 15:58:54

标签: symfony doctrine-orm dql

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

5 个答案:

答案 0 :(得分:129)

目前的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;
    }
}

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

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

请注意,本答案下一部分中提到的Controller::getUser()快捷方式在Symfony 3中已弃用,已在Symfony 4.0中删除

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

答案 1 :(得分:16)

在symfony2中,我们可以通过以下代码更简单:

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

答案 2 :(得分:3)

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

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

答案 3 :(得分: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()); 
}

答案 4 :(得分:0)

通过用户名查找:

public function getLoggedUser()
    {
        $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
        return $this->getUser();
    }

然后

$this->getLoggedUser()->getUsername() will return the username.