Php 缺少Symfony4用户界面->;getId()如何访问用户id
为什么Symfony 4中的Php 缺少Symfony4用户界面->;getId()如何访问用户id,php,symfony,symfony4,Php,Symfony,Symfony4,为什么Symfony 4中的UserInterface中没有getId()方法?我试图将UserInterface$user传递给我的控制器方法,以便使用$user->getId()实际访问当前登录的用户id。但是这个方法根本不存在于这个接口中——谈到最佳实践,我不应该简单地将这些方法添加到接口中,对吗 我还尝试使用我的实体,但无法访问当前用户对象以获取对象的id 第一次使用sf4时,我是不是完全弄错了?您得到的是当前登录用户,但没有用户界面(您不需要它),如下所示: $user = $this
UserInterface
中没有getId()
方法?我试图将UserInterface$user
传递给我的控制器方法,以便使用$user->getId()
实际访问当前登录的用户id。但是这个方法根本不存在于这个接口中——谈到最佳实践,我不应该简单地将这些方法添加到接口中,对吗
我还尝试使用我的实体,但无法访问当前用户对象以获取对象的id
第一次使用sf4时,我是不是完全弄错了?您得到的是当前登录用户,但没有用户界面(您不需要它),如下所示:
$user = $this->getUser()
要获取用户的Id
,您可以使用:
$user = $this->getUser()->getId();
您可以获得当前登录用户,但不需要UserInterface(您不需要它),如下所示:
$user = $this->getUser()
要获取用户的Id
,您可以使用:
$user = $this->getUser()->getId();
Symfony的
用户界面
是安全组件的一部分。安全组件只关心身份验证。对于组件,用户名
是用户的唯一标识符。它并不假设您的用户有一个id字段。它只关心与身份验证有关的字段
您不应该将UserInterface
作为依赖项注入控制器方法中,因为它不是服务。相反,Symfony通过$this->getUser()
方法提供shorcut。该类型提示返回用户界面
。如果希望在具体实现中使用类型提示,只需在控制器类名的顶部添加一个docblock:@method User | null getUser()
编辑:
在
@method User | null getUser()
中添加了null
,因此您知道如果没有经过身份验证的用户,该调用可能返回null。这也将有助于代码智能工具对空指针异常发出警告。Symfony的UserInterface
是安全组件的一部分。安全组件只关心身份验证。对于组件,用户名
是用户的唯一标识符。它并不假设您的用户有一个id字段。它只关心与身份验证有关的字段
您不应该将UserInterface
作为依赖项注入控制器方法中,因为它不是服务。相反,Symfony通过$this->getUser()
方法提供shorcut。该类型提示返回用户界面
。如果希望在具体实现中使用类型提示,只需在控制器类名的顶部添加一个docblock:@method User | null getUser()
编辑:
在
@method User | null getUser()
中添加了null
,因此您知道如果没有经过身份验证的用户,该调用可能返回null。这也将有助于代码智能工具针对空指针异常向您发出警告。感谢您的额外解释!帮我搞定了不客气。另外,您应该检查$this->getUser()
在幕后做了什么。它调用名为TokenStorage
的服务,其中返回Symfony的身份验证令牌。如果没有经过身份验证的用户(也就是说,Symfon的安全令牌中没有存储任何用户),那么$this->getUser()
将返回null
,感谢您的额外解释!帮我搞定了不客气。另外,您应该检查$this->getUser()
在幕后做了什么。它调用名为TokenStorage
的服务,其中返回Symfony的身份验证令牌。如果没有经过身份验证的用户(意味着Symfon的安全令牌中没有存储任何用户),则$this->getUser()
将返回null