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

Symfony4 UserInterface missing ->getId() how to access users id

为什么 Symfony 4 的 UserInterface 里面没有 getId() 方法?我试图将 UserInterface $user 传递给我的控制器方法,以使用 $user->getId() 实际访问当前登录用户的 ID。但是这个方法根本不存在于这个接口中 - 谈论最佳实践我不应该简单地将这些方法添加到接口中,对吧?

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

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

你可以在没有 UserInterface 的情况下获取当前登录的用户(你不需要它),就像这样:

$user = $this->getUser()

要获取用户的 Id,您可以使用:

$user = $this->getUser()->getId();

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

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

编辑:

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