我正在将现有的/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
。具有其他依赖项的其他服务也可以正常工作。
答案 0 :(得分:0)
感谢您的评论。经过更多的挖掘之后,我在日志中发现了一些警告,这些警告与所提到的服务完全没有关系。似乎Symfony很难初始化一些完全不同的服务。尽管此问题与报告的错误无关,但解决警告可以解决错误。
Symfony错误报告似乎出了点问题。我将对此进行进一步调查。
由于问题中描述的问题实际上不是真正的问题,因此我首先想删除问题。但是,这个问题并可能回答,仍然可能会帮助那些偶然发现类似行为的人...