我将我的项目从Symfony 2.7迁移到3.4并且我通过执行一些Doctrine灯具来解决问题。正如标题所说,我得到了这个错误
Error thrown while running command "doctrine:fixtures:load --append". Message: "Circular reference detected for service "service_2", path: "service_2"." ["error" => Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException { …},"command" => "doctrine:fixtures:load --append","message" => "Circular reference detected for service "service_2", path: "service_2"."] []
当我尝试使用已经在另一个服务器中注入的服务容器获取服务时。该场景如下所示:
service_1:
class: Acme\BusinessBundle\ServiceOne
arguments: ["@service_2"]
public: true
tags:
- { name: monolog.logger, channel: s1 }
service_2:
class: Acme\BusinessBundle\ServiceTwo
arguments: ["@doctrine.orm.default_entity_manager", "@logger"]
public: true
tags:
- { name: monolog.logger, channel: s2 }
然后在灯具中我只是做
$s1 = $this->container->get('service_1');
$s2 = $this->container->get('service_2');
获得例外。
但非常奇怪的是,第二次出现service_2
时会出现异常。所以基本上在第一个夹具中我得到了两个服务没有任何问题,但是一旦第二个夹具开始并且$s2
被创建,我得到ServiceCircularReferenceException
(使用xdebug检查)。当然,我对Symfony 2.7没有任何问题。
那为什么我第一次没有得到任何例外?为什么我第二次得到它?有什么想法吗?
答案 0 :(得分:0)
将整个容器传递给服务,然后在其中获取所需的服务。 这种情况多次发生在我身上,我总是能够修复它改变依赖注入。