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

时间:2018-07-27 12:36:14

标签: php symfony symfony4

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

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

第一次SF4,我完全错了吗?

2 个答案:

答案 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();