我如何获得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}
希望这可以帮助!
- 用户名和密码在httpsurl
- MVC 6绑定属性消失?
- 我怎样才能保护自己免受压缩炸弹的伤害?
- 在Javascript中构buildHTMLstring真的不安全吗?
- 使用PHP / Apache来限制对静态文件(html,css,img等)的访问
- htmlspecialchars和mysql_real_escape_string保持我的PHP代码安全注入?
- 这个Rails JSON身份validationAPI(使用Devise)是否安全?
- SQL注入绕过mysql_real_escape_string()
- 为什么JPasswordField.getPassword()用它的密码创build一个String?