为何已在YAML配置数组参数,仍出现Autowire自动装配报错?
解决Symfony依赖注入报错:Cannot autowire service: argument is type-hinted "array", you should configure its value explicitly
你的配置看似正确,但报错说明Symfony容器没有正确读取到$routesRequiringToken的数组配置,可能由以下几个原因导致,对应解决方案如下:
1. 错误的YAML缩进或多余的标签属性
YAML对缩进极度敏感,且kernel.event_subscriber标签不需要bind: true属性,这个多余属性可能干扰配置解析。修正后的服务配置如下:
App\EventSubscriber\ApiTokenListener: autowire: true arguments: $routesRequiringToken: ['app_authors', 'app_books'] tags: - { name: kernel.event_subscriber }
确保所有子项(autowire、arguments、tags)的缩进一致(建议用4个空格,不要用制表符),避免因缩进错误导致配置项被容器忽略。
2. 缓存导致的配置不生效
Symfony会缓存配置文件,即使你修改了配置,旧缓存可能仍在生效。执行以下命令清除缓存:
php bin/console cache:clear
如果是生产环境,记得加上--env=prod参数。
3. 其他配置文件的覆盖
检查是否在环境特定的配置文件(如config/packages/dev/services.yaml、config/packages/prod/services.yaml)中重新定义了ApiTokenListener服务,这些文件的配置会覆盖主配置,导致你设置的参数失效。
备选方案:全局绑定参数
如果上述方法都无效,可以尝试在services.yaml的全局默认配置中绑定这个参数,确保所有需要该参数的服务都能获取到值:
services: _defaults: autowire: true autoconfigure: true bind: $routesRequiringToken: ['app_authors', 'app_books'] App\EventSubscriber\ApiTokenListener: tags: - { name: kernel.event_subscriber }
内容的提问来源于stack exchange,提问作者Sorin Ene
相关产品推荐
相关产品推荐

