Dependency Injections似乎创建了新的实例实例,这导致实体分离)

问题描述 投票:0回答:1

我有两个服务,这些服务通过构造函数注入了Doctrine。当在EventListener中加载实体并为其提供服务时,该实体将被分离。

当我从事件监听器向服务提供DoctrineEntityManager时,仍将管理实体。

class Listener implements EventSubscriberInterface
{
    /** @var EntityManagerInterface */
    private $em;

    /** @var Service */
    private $service;

    /** @var EventDispatcherInterface */
    private $eventDispatcher;

    public function __construct(
        EntityManagerInterface $em,
        Service $service,
        EventDispatcherInterface $eventDispatcher
    ) {
        $this->em = $em;

        $this->eventDispatcher = $eventDispatcher;
        $this->service = $service;
    }


    public function listenerFunction(Event $event)
    {
        $user = $event->getEntity()->getUser();
        var_dump($this->em->contains($user)); // true

        $this->service->func($this->em, $user);
    }
}

class Service
{
    /** @var EventDispatcherInterface */
    private $eventDispatcher;

    public function __construct(EntityManagerInterface $em, EventDispatcherInterface $eventDispatcher)
    {
        $this->em = $em;
        $this->eventDispatcher = $eventDispatcher;
    }

    public function func($em, $user)
    {
        var_dump($this->em->contains($user)); // false 
        var_dump($em->contains($user)); // true
    }
}

服务Yaml

services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: true

  App\Payment\Command\:
    resource: "%kernel.project_dir%/src/Payment/Command/*"
    tags:
      - { name: console.command }

  App\Payment\Service\:
    resource: "%kernel.project_dir%/src/Payment/Service/*"

  App\Payment\Controller\:
    resource: "%kernel.project_dir%/src/Payment/Controller/*"

  App\Payment\EventSubscriber\:
    resource: "%kernel.project_dir%/src/Payment/EventSubscriber/*"
    tags:
      - { name: kernel.event_subscriber }

服务中的EntityManager应该包含$ user实体。我在想symfony在这里创建实体管理器接口的第二个实例,但是说每个项目只有一个实例(https://symfony.com/doc/current/service_container/shared.html

symfony dependency-injection doctrine symfony4
1个回答
0
投票

已通过更新所有软件包(composer update)解决了; D

© www.soinside.com 2019 - 2024. All rights reserved.