Symfony命令获取rms_push_notifications服务遇Buzz客户端参数错误求助
解决rms_push_notifications服务初始化报错问题
错误原因分析
这个报错的核心是依赖版本不兼容:你使用的richsage/rms-push-notifications-bundle和新版本的kriswallsmith/buzz(HTTP客户端)不匹配。Buzz 1.x+版本的AbstractClient构造函数强制要求传入至少一个LoggerInterface实例,但bundle的AndroidGCMNotification类在实例化Buzz客户端时,还是用了旧的无参构造方式,导致参数不足报错。
解决方案
根据你的需求,有两种可行的修复方式:
方案1:降级Buzz到兼容版本
如果不需要Buzz的新特性,最简单的方式是降级到bundle兼容的旧版本:
- 修改项目根目录的
composer.json,指定Buzz版本:
{ "require": { "kriswallsmith/buzz": "^0.16" } }
- 执行更新命令:
composer update kriswallsmith/buzz
旧版Buzz的AbstractClient不需要Logger参数,bundle的原有代码就能正常运行。
方案2:手动配置依赖并覆盖bundle服务
如果想保留新版本Buzz,需要手动配置Buzz客户端,并覆盖bundle的Android通知服务,确保依赖正确注入:
- 在
services.yml中添加以下配置:
services: # 配置Buzz Curl客户端,注入Symfony自带的Logger buzz.client: class: Buzz\Client\Curl arguments: ['@logger'] # 覆盖rms的Android通知服务,注入我们配置好的Buzz客户端 rms_push_notifications.android: class: RMS\PushNotificationsBundle\Service\OS\AndroidGCMNotification arguments: - '@buzz.client' - '%rms_push_notifications.android.fcm.api_key%' - '%rms_push_notifications.android.timeout%' - '%rms_push_notifications.android.fcm.use_multi_curl%' calls: - [setLogger, ['@logger']]
- 清除Symfony缓存,确保配置生效:
# 开发环境 php bin/console cache:clear # 生产环境 php bin/console cache:clear --env=prod
额外检查
- 你的
SendNotif命令中获取服务的方式$this->container->get('rms_push_notifications')是正确的,主服务会自动依赖配置好的Android/IOS子服务。 - 如果后续IOS通知也出现类似报错,可参照Android的配置方式,覆盖
rms_push_notifications.ios服务,注入正确的客户端依赖。
内容的提问来源于stack exchange,提问作者Minirock
相关产品推荐
相关产品推荐

