php 解决循环引用,php – 如何解决“检测到服务的循环引用”问题?

我正在尝试将我的存储库服务注入到EventListener中,但这导致我发现异常,这是因为我对Symfony2的基本知识,我不知道如何解决.例外情况是:

ServiceCircularReferenceException in bootstrap.php.cache line 2129:

Circular reference detected for service “doctrine.orm.default_entity_manager”, path: “doctrine.orm.default_entity_manager -> doctrine.dbal.default_connection -> person.connect.listener -> tag.repository.service”.

这是我如何声明存储库和监听器:

tag.repository.service:

class: Application\Bundle\PersonBundle\Entity\TagRepository

factory: ["@doctrine", getRepository]

arguments: [ Application\Bundle\PersonBundle\Entity\Tag ]

person.connect.listener:

class: Application\Bundle\PersonBundle\EventListener\ConnectListener

arguments:

tokenStorage: "@security.token_storage"

tagRepo: "@tag.repository.service"

tags:

- { name: doctrine.event_listener, event: postPersist, connection: default }

我能找到的大多数答案建议注入服务容器,但我真的不想这样做.有没有办法妥善解决这个问题?

UPD:这是监听器的代码.在我尝试注入TagRepository之前,一切正常

class ConnectListener

{

/**

* @var TokenStorage

*/

private $tokenStorage;

/**

* @var TagRepository

*/

private $tagRepo;

/**

* @param TokenStorage $tokenStorage

* @param TagRepository $tagRepo

*/

public function __construct(TokenStorage $tokenStorage, TagRepository $tagRepo)

{

$this->tokenStorage = $tokenStorage;

}

/**

* @param LifecycleEventArgs $args

* @return void

*/

public function postPersist(LifecycleEventArgs $args)

{

$entity = $args->getEntity();

$entityManager = $args->getEntityManager();

if ($entity instanceof Person) {

$user = $this->tokenStorage->getToken()->getUser();

$visibility = new PersonVisibility($entity, $user);

$visibility->setVisibilityType(PersonVisibility::VT_CREATED);

$entityManager->persist($visibility);

$entityManager->flush();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值