Php Symfony选择要注入的类

Php Symfony选择要注入的类,php,symfony,dependency-injection,Php,Symfony,Dependency Injection,我使用symfony4和Lexik(管理JWT)以及FOSRest包 当我发送令牌时,我使用以下方法: public function getTokenUser(JWTTokenManagerInterface $JWTManager) { $user = $this->getUser(); return new JsonResponse(['token' => $JWTManager->create($user)]); } 由于需要向有效负载添加数据,我创建

我使用symfony4和Lexik(管理JWT)以及FOSRest包

当我发送令牌时,我使用以下方法:

public function getTokenUser(JWTTokenManagerInterface $JWTManager) {
    $user = $this->getUser();
    return new JsonResponse(['token' => $JWTManager->create($user)]);
}
由于需要向有效负载添加数据,我创建了一个从JWTManager扩展而来的JWTManagerRCUSTOM类

如果我想让getTokenUser()使用我的服务,我需要像这样更改函数签名:

public function getTokenUser(JWTManagerCustom $JWTManager) { ... }

我更愿意继续使用界面,我该怎么办

由于JWTManager实现了JWTTokenManagerInterface,因此您的子类也实现了JWTTokenManagerInterface。所以问题变成了方法的调用方将提供什么类型?此外,如果将签名保留在接口中,则只能通过类型转换访问具体类型的属性,并且只有在始终使用正确的类型调用函数时才有效,但是没有理由保留接口签名。在services.yaml文件中,将自定义服务别名为接口。因为JWTManager实现了JWTTokenManagerInterface,所以您的子类也实现了JWTTokenManagerInterface。所以问题变成了方法的调用方将提供什么类型?此外,如果将签名保留在接口中,则只能通过类型转换访问具体类型的属性,并且只有在始终使用正确的类型调用函数时才有效,但是没有理由保留接口签名。在services.yaml文件中,将自定义服务别名为接口。这将覆盖默认映射。