Symfony autowire:为什么将服务注入为null?

时间:2019-01-10 12:05:40

标签: symfony autowired

我正在将现有的/path/inside/container项目迁移到Symfony 2.8。尽管autowire对于大多数服务似乎都可以正常工作,但某些依赖项被注入Symfony 3.4,这会导致异常...

null取决于ServiceA

ServiceB

class ServiceA { private $serviceB; public function __construct(ServiceB $serviceB) { $this->serviceB = $serviceB; } public function doSomething() { return $this->serviceB->someMethod(); } } // Symfony 2.8 - src/AppBundle/Resources/services.yml services: ... app.serviceB ... app.serviceA arguments: - "@app.serviceB" // Symfony 3.4 - Using autowire in app/config/services.yml services: _defaults: autowire: true autoconfigure: true AppBundle\: resource: '../../src/AppBundle/*' exclude: '../../src/AppBundle/{Entity,Repository,Tests}' ... 中一切正常,发现Symfony 2.8执行正常。

使用$serviceA->doSomething()Symfony 3.4配置相同的代码会导致异常:

  

Symfony \ Component \ Debug \ Exception \ FatalThrowableError(代码:0):   在 null ...

上调用成员函数 someMethod()

这样看来autowire没有正确注入ServiceB吗?

这可能是什么原因?日志中没有其他例外,这可以解释为什么ServiceA为null。似乎可以毫无问题地创建$serviceB。具有其他依赖项的其他服务也可以正常工作。

1 个答案:

答案 0 :(得分:0)

感谢您的评论。经过更多的挖掘之后,我在日志中发现了一些警告,这些警告与所提到的服务完全没有关系。似乎Symfony很难初始化一些完全不同的服务。尽管此问题与报告的错误无关,但解决警告可以解决错误。

Symfony错误报告似乎出了点问题。我将对此进行进一步调查。

由于问题中描述的问题实际上不是真正的问题,因此我首先想删除问题。但是,这个问题并可能回答,仍然可能会帮助那些偶然发现类似行为的人...