繁体   English   中英

Symfony 3.4-检测到循环参考服务

[英]Symfony 3.4 - Circular reference detected for service

我正在将我的项目从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 因此,基本上在第一个Fixture中,我可以毫无问题地获得这两个服务,但是在第二个Fixture启动并创建$s2 ,我就获得了ServiceCircularReferenceException (已使用xdebug进行了检查)。 当然,我对Symfony 2.7没有任何问题。

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

将整个容器传递给服务,然后在其中获取所需的服务。 这发生在我身上好几次了,我一直能够通过更改依赖项注入来修复它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM