Symfony3.4+HWI OAuth Bundle自动注入报错:OAuthUserProvider构造参数问题
解决Symfony3.4中HWIOAuthBundle + FOSUserBundle的Autowire错误
这个问题我升级Symfony3.4搭配FOSUserBundle时也碰到过,核心原因是Symfony3.4默认启用的Autowire机制无法处理FOSUserBundle父类构造函数中无类型提示的$properties参数,下面给你两个直接可行的解决方案:
方案一:显式配置服务参数
直接在你的服务配置文件(比如app/config/services.yml或者config/services.yaml)里,给自定义的OAuthUserProvider显式指定$properties参数的值:
services: App\Security\Core\User\OAuthUserProvider: arguments: $properties: []
解释:FOSUserBundle的FOSUSBUserProvider构造函数需要一个数组类型的$properties参数,但因为它没有类型提示,Autowire无法自动推断该注入什么值。显式传入空数组就可以满足父类的要求,如果你有自定义的OAuth属性映射到User实体的需求,也可以在这里填写对应的映射数组。
方案二:给自定义Provider的构造函数添加类型提示
修改你的OAuthUserProvider类,在构造函数的$properties参数上添加array类型提示,同时设置默认值为空数组:
namespace App\Security\Core\User; use FOS\UserBundle\Security\UserProvider as FOSUSBUserProvider; class OAuthUserProvider extends FOSUSBUserProvider { public function __construct(array $properties = []) { parent::__construct($properties); } // 你的自定义逻辑方法... }
解释:添加类型提示后,Symfony的Autowire就能识别出这个参数是数组类型,会自动注入默认的空数组,完美解决参数无法自动注入的问题。
额外注意事项
- 请确保你使用的FOSUserBundle版本是2.x系列(它支持Symfony3.4),HWIOAuthBundle建议使用0.6.x或者1.x版本,保证和Symfony3.4以及FOSUserBundle的兼容性。
- 如果之后还有OAuth登录的其他问题,可以检查HWIOAuthBundle的路由配置、客户端ID/密钥是否正确配置在
config.yml中。
内容的提问来源于stack exchange,提问作者Al Ex
相关产品推荐
相关产品推荐

