Symfony登录用户的id

Har*_*itz 49 dql symfony doctrine-orm

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

Jak*_*las 131

当前的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

$user = $this->get('security.token_storage')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)

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

旧版Symfony版本

访问用户的最简单方法是扩展基本控制器,并使用快捷getUser()方法(在Symfony 4中删除):

$user = $this->getUser();
Run Code Online (Sandbox Code Playgroud)

Symfony 2.6开始,您可以从安全令牌存储中检索用户:

$user = $this->get('security.token_storage')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)

在Symfony 2.6之前,可以从安全上下文服务访问令牌:

$user = $this->get('security.context')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)

请注意,安全上下文服务在Symfony 2中已弃用,并已在Symfony 3.0中删除.

  • 很好的答案.要从用户对象**获取其他字段,例如电子邮件,名字或性别.像这样使用.为了获得性别,**回声'性别是:'.$用户> getGender();** (2认同)

53i*_*ott 16

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

$id = $this->getUser()->getId();
Run Code Online (Sandbox Code Playgroud)


小智 5

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

$userId = $this->get('security.context')->getToken()->getUser()->getId();
Run Code Online (Sandbox Code Playgroud)