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