我如何获得Symfony2中代表当前用户的实体?

我正在使用Symfony安全设置。 一切正常,但我不知道如何做一件重要的事情:

在树枝上,我可以通过以下操作来达到当前用户的信息:

Welcome, {{ app.user.username }} 

或类似的

如何在Controller中访问相同的信息? 具体来说,我想获得当前的用户实体,所以我可以把它关系存储在另一个实体(一对一的映射)。

我真的希望是这样

 $this->get('security.context')->getToken()->getUser() 

但是这不起作用。 它给了我一个类的类

 Symfony\Component\Security\Core\User\User 

我想要一个types

 Acme\AuctionBundle\Entity\User 

这是我的实体….

正如ktolis所说,你首先必须configuration你的/app/config/security.yml

然后用

 $usr= $this->get('security.context')->getToken()->getUser(); $usr->getUsername(); 

应该是enougth!

$ usr是你的用户对象! 您不需要再次查询。

find从Sf2文档的 security.yml设置提供程序的方法,然后重试。

好运!


编辑:从symfony 2.6, security.context服务被弃用,使用security.token_storage服务为:

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

最佳实践

根据Symfony 2.1以来的文档,只需使用这个快捷键:

 $user = $this->getUser(); 

以上仍然在Symfony 3.2上工作 ,这是一个捷径:

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

security.token_storage服务在Symfony 2.6中引入。 在Symfony 2.6之前,你必须使用security.context服务的getToken()方法。

例如 :如果你想直接使用用户名:

 $username = $this->getUser()->getUsername(); 

如果用户types错误

用户将是一个对象,该对象的类将取决于您的用户提供者 。

线程有点老,但我认为这可能会节省一些人的时间…

我遇到了与原始问题相同的问题,types显示为Symfony \ Component \ Security \ Core \ User \ User

最终certificate我是使用内存用户login的

我的security.yml看起来像这样

 security: providers: chain_provider: chain: providers: [in_memory, fos_userbundle] fos_userbundle: id: fos_user.user_manager in_memory: memory: users: user: { password: userpass, roles: [ 'ROLE_USER' ] } admin: { password: adminpass, roles: [ 'ROLE_ADMIN', 'ROLE_SONATA_ADMIN' ] } 

in_memory用户types始终是Symfony \ Component \ Security \ Core \ User \ User如果要使用自己的实体,请使用该提供程序的用户login。

谢谢,hj

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

那么,首先你需要从控制器的会话中请求用户的用户名,如下所示:

 $username=$this->get('security.context')->getToken()->getUser()->getUserName(); 

然后对数据库执行查询,并使用常规的dql来获取对象

 $em = $this->get('doctrine.orm.entity_manager'); "SELECT u FROM Acme\AuctionBundle\Entity\User u where u.username=".$username; $q=$em->createQuery($query); $user=$q->getResult(); 

$用户现在应该使用这个用户名(当然你也可以使用其他字段)

…但是你必须首先configuration你的/app/config/security.ymlconfiguration来为安全提供者使用相应的字段,如下所示:

 security: provider: example: entity: {class Acme\AuctionBundle\Entity\User, property: username} 

希望这可以帮助!