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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

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

在树枝中,我可以通过以下方式达到当前用户的信息:

Welcome, {{ app.user.username }}

或类似的

我如何在控制器中访问相同的信息?具体来说,我想获取当前的用户实体,以便我可以将其存储在另一个实体(一对一映射)中。

我真的希望会是这样

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

但那不起作用。它给了我一种类型

Symfony\Component\Security\Core\User\User

我想要一个类型

Acme\AuctionBundle\Entity\User

这是我的实体.

提问于
用户回答回答于

你首先必须配置你的/app/config/security.yml

然后用

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

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

security.ymlSf2文档中找出设置提供商的方法,然后重试。

从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之前,你必须使用服务的getToken()方法security.context

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

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

如果用户类型错误

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

扫码关注云+社区