为什么 Symfony 4 中的
getId()
中没有 UserInterface
方法?我尝试将 UserInterface $user
传递给我的控制器方法,以使用 $user->getId()
实际访问当前登录用户的 ID。
但是这个方法根本不存在于这个接口中 - 谈论最佳实践我不应该简单地将这个方法添加到接口中,对吗?
我也尝试使用我的实体,但无法访问当前用户对象来获取对象的 id。
第一次看sf4,我是不是完全搞错了?
Symfony 的
UserInterface
是安全组件的一部分。安全组件只关心身份验证。对于组件来说,username
是用户的唯一标识符。它不假设您的用户有 id 字段。它只关心与身份验证目的相关的字段。
您不应将
UserInterface
作为依赖项注入控制器方法中,因为它不是服务。相反,Symfony 通过 $this->getUser()
方法提供了快捷方式。键入提示返回 UserInterface
。如果您想对具体实现进行类型提示,只需将其作为文档块添加在控制器类名称的顶部:@method User|null getUser()
。
编辑:
在
null
中添加了 @method User|null getUser()
,因此您知道,如果没有经过身份验证的用户,该调用可能会返回 null。这也将有助于代码智能工具警告您空指针异常。
您可以在没有用户界面的情况下获取当前登录的用户(您不需要它),如下所示:
$user = $this->getUser()
要获取用户的
Id
,您可以使用:
$user = $this->getUser()->getId();