Entity framework 如何在Symfony2中获取表示当前用户的实体?
我正在使用Symfony安全设置。一切正常,但我不知道如何做一件重要的事情: 在twig中,我可以通过以下操作获取当前用户的信息:Entity framework 如何在Symfony2中获取表示当前用户的实体?,entity-framework,security,symfony,Entity Framework,Security,Symfony,我正在使用Symfony安全设置。一切正常,但我不知道如何做一件重要的事情: 在twig中,我可以通过以下操作获取当前用户的信息: Welcome, {{ app.user.username }} 或类似 如何访问控制器中的相同信息?具体地说,我希望获取当前用户实体,以便将其以关系方式存储在另一个实体中(一对一映射) 我真的希望是这样 $this->get('security.context')->getToken()->getUser() 但这不起作用。它给了我一个类型的
Welcome, {{ app.user.username }}
或类似
如何访问控制器中的相同信息?具体地说,我希望获取当前用户实体,以便将其以关系方式存储在另一个实体中(一对一映射)
我真的希望是这样
$this->get('security.context')->getToken()->getUser()
但这不起作用。它给了我一个类型的类
Symfony\Component\Security\Core\User\User
我想要一个这种类型的
Acme\AuctionBundle\Entity\User
这是我的实体…首先,您需要在控制器操作中从会话请求用户的用户名,如下所示:
$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();
$user现在应该拥有这个用户名的用户(当然,您也可以使用其他字段)
…但您必须首先配置/app/config/security.yml配置,以便为您的安全提供商使用适当的字段,如下所示:
security:
provider:
example:
entity: {class Acme\AuctionBundle\Entity\User, property: username}
希望这有帮助 Symfony 4+,2019+进近
在symfony 4中(也可能是3.3,但只有在4中进行了真正的测试),您可以通过自动布线在控制器中注入安全性服务,如下所示:
$username=$this->get('security.context')->getToken()->getUser()->getUserName();
线程有点旧,但我认为这可能会节省一些人的时间
我遇到了与原始问题相同的问题,类型显示为
Symfony\Component\Security\Core\User\User
最终证明我是使用内存用户登录的
我的安全。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' ] }
内存中的用户类型始终为Symfony\Component\Security\Core\user\user如果要使用自己的实体,请使用该提供程序的用户登录
谢谢,
hj最佳实践
根据Symfony 2.1,只需使用以下快捷方式:
$user = $this->getUser();
以上内容仍在Symfony 3.2上使用,是实现此目的的快捷方式:
$user = $this->get('security.token_storage')->getToken()->getUser();
Symfony 2.6中引入了security.token\u存储
服务。在Symfony 2.6之前,您必须使用security.context
服务的getToken()
方法
示例:如果您直接想要用户名:
$username = $this->getUser()->getUsername();
如果用户类类型错误
用户将是一个对象,该对象的类别将取决于您的用户。在symfony>=3.2中,声明:
获取控制器中当前用户的另一种方法是
键入带有提示的控制器参数(并将其设置为默认值)
如果登录是可选的,则为null):
这只推荐给没有扩展经验的开发人员
从开始,不要使用
任何一个否则,建议继续使用getUser()
捷径
关于它你要么想要用户,要么想要用户名。选择权在你。得到你需要的东西是你的责任。正如您所说,您不需要常规用户,只需要Acme命名空间用户。“从Acme\AuctionBundle\Entity\user u中选择u,其中u.username=“.username=”..username;=您应该使用参数化查询$this->get('security.context')->getToken()->getUser()
本身会获取登录的用户对象。您不必再次查询它。事实上,您使用的是哪个版本?如果我需要PHP模板上的用户实体怎么办?@DomingoSL检查官方文档中的以下链接:自Symfony 2.6以来,security.context服务已被弃用并分为两个新服务:security.authorization\u checker和security.token\u storage。您可以在这里检查获取当前用户的正确方法:我在Symfony 5.1.2和$user=$this->security->getUser()
,$user
对于我来说总是null
,无论是否登录。哦,这似乎是因为我在事件订阅服务器中执行此操作,并且在请求的早期尚未初始化。欢迎使用stackoverflow。请解释一下答案。stackoverflow.com/help/how-to-answer这在尝试获取EventSubscriber中的当前用户时帮了我很多忙:我必须在_构造中将(Security$Security)作为参数自动连线,然后使用$Security->getUser()和瞧!
$this->container->get('security.token_storage')->getToken()->getUser();
use Symfony\Component\Security\Core\User\UserInterface\UserInterface;
public function indexAction(UserInterface $user = null)
{
// $user is null when not logged-in or anon.
}