Symfony的越来越登录用户的id(Symfony getting logged in user&

2019-06-24 07:38发布

我正在开发使用Symfony2中和学说2.我想知道如何才能得到当前登录的用户ID的应用程序。

Answer 1:

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

您仍然可以使用安全令牌存储在所有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已被删除。



Answer 2:

在Symfony2中,我们可以得到这个代码的简单:

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


Answer 3:

你可以用下面的代码的变量:

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


Answer 4:

这可以穿好衣服的方法:

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

    return $userId;
}

而感应$这个 - > getUserId()

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


文章来源: Symfony getting logged in user's id