Symfony 3.4 - 检测到服务的循环引用

时间:2017-11-02 12:42:54

标签: php symfony exception doctrine-orm

我将我的项目从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没有任何问题。

那为什么我第一次没有得到任何例外?为什么我第二次得到它?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将整个容器传递给服务,然后在其中获取所需的服务。 这种情况多次发生在我身上,我总是能够修复它改变依赖注入。