Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 缺少Symfony4用户界面->;getId()如何访问用户id_Php_Symfony_Symfony4 - Fatal编程技术网

Php 缺少Symfony4用户界面->;getId()如何访问用户id

Php 缺少Symfony4用户界面->;getId()如何访问用户id,php,symfony,symfony4,Php,Symfony,Symfony4,为什么Symfony 4中的UserInterface中没有getId()方法?我试图将UserInterface$user传递给我的控制器方法,以便使用$user->getId()实际访问当前登录的用户id。但是这个方法根本不存在于这个接口中——谈到最佳实践,我不应该简单地将这些方法添加到接口中,对吗 我还尝试使用我的实体,但无法访问当前用户对象以获取对象的id 第一次使用sf4时,我是不是完全弄错了?您得到的是当前登录用户,但没有用户界面(您不需要它),如下所示: $user = $this

为什么Symfony 4中的
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