Symfony4 UserInterface 缺失 ->getId() 如何访问用户 id

问题描述 投票:0回答:2

为什么 Symfony 4 中的

getId()
中没有
UserInterface
方法?我尝试将
UserInterface $user
传递给我的控制器方法,以使用
$user->getId()
实际访问当前登录用户的 ID。

但是这个方法根本不存在于这个接口中 - 谈论最佳实践我不应该简单地将这个方法添加到接口中,对吗?

我也尝试使用我的实体,但无法访问当前用户对象来获取对象的 id。

第一次看sf4,我是不是完全搞错了?

php symfony symfony4
2个回答
3
投票

Symfony 的

UserInterface
是安全组件的一部分。安全组件只关心身份验证。对于组件来说,
username
是用户的唯一标识符。它不假设您的用户有 id 字段。它只关心与身份验证目的相关的字段。

您不应将

UserInterface
作为依赖项注入控制器方法中,因为它不是服务。相反,Symfony 通过
$this->getUser()
方法提供了快捷方式。键入提示返回
UserInterface
。如果您想对具体实现进行类型提示,只需将其作为文档块添加在控制器类名称的顶部:
@method User|null getUser()

编辑:

null
中添加了
@method User|null getUser()
,因此您知道,如果没有经过身份验证的用户,该调用可能会返回 null。这也将有助于代码智能工具警告您空指针异常。


1
投票

您可以在没有用户界面的情况下获取当前登录的用户(您不需要它),如下所示:

$user = $this->getUser()

要获取用户的

Id
,您可以使用:

$user = $this->getUser()->getId();
© www.soinside.com 2019 - 2024. All rights reserved.