Symfony 7.1中SnapshotService自动注入失败问题求助
Symfony 7.1 SnapshotService 自动注入失败排查
问题原因
你遇到的问题是服务配置顺序导致显式参数被覆盖。在你的services.yaml中,App\: 这个自动导入规则(批量注册src目录下的所有服务)写在了App\Service\SnapshotService的显式配置之后。Symfony处理服务配置时按从上到下的顺序执行,自动导入规则会重新以默认的autowire: true规则注册SnapshotService,直接覆盖了你之前设置的arguments参数,导致容器无法找到$targetDirectory的注入值,从而抛出自动注入错误。
解决方案
把App\Service\SnapshotService的显式配置移到App\: 自动导入规则的后面,让显式配置覆盖自动导入的默认规则。修改后的services.yaml如下:
parameters: frontend_base_url: '%env(FRONTEND_BASE_URL)%' services: _defaults: autowire: true autoconfigure: true App\EventSubscriber\AuthenticationSuccessSubscriber: tags: - { name: kernel.event_subscriber } App\Exception\UserNotActivatedException: tags: - { name: kernel.event_listener, event: kernel.exception } # 先执行自动导入规则 App\: resource: '../src/' exclude: - '../src/DependencyInjection/' - '../src/Entity/' - '../src/Kernel.php' # 再设置显式参数,覆盖自动导入的默认配置 App\Service\SnapshotService: arguments: $targetDirectory: '%kernel.project_dir%/public/uploads/snapshots'
验证步骤
修改配置后,执行缓存清理命令确保配置生效:
php bin/console cache:clear
之后再尝试调用SnapshotService,即可正常注入$targetDirectory参数。
补充说明
Symfony 4中无异常是因为旧版本的服务配置优先级逻辑不同,自动导入规则不会覆盖之前的显式配置。但Symfony 5+之后对服务配置的优先级处理更严格,必须保证显式配置在自动导入规则之后,才能让自定义参数生效。
内容的提问来源于stack exchange,提问作者CitizenG1
相关产品推荐
相关产品推荐

