为了简单起见,我有一个服务'tenantcontext',该服务从每个请求上从数据库中检索当前的租户,因此需要EntityManager。
。此外,我想将所有与租户建立多个关系的实体自动关联,然后在冲洗之前自动将其自动关联,因此我实施了一个租户,该租户将检测这些实体并进行协会(setTenant(setTenant())。为此,TenantListener需要租户。
这是我的services.yml
services:
tenant.service.tenant_context:
class: TenantBundleContextTenantContext
arguments: [ "@doctrine.orm.entity_manager" ]
tenant.event_listener.tenant_listener:
class: TenantBundleEventListenerTenantListener
arguments: [ "@tenant.service.tenant_context" ]
tags:
- { name: doctrine.event_listener, event: preFlush }
这种配置给我一个循环参考错误:
[SymfonyComponentDependencyInjectionExceptionServiceCircularReferenceException]
Circular reference detected for service "doctrine.dbal.default_connection", path: "doctrine.dbal.default_connection".
如果我正确理解,通过将实体标记为" doctrine.event_listener",我正在制作依赖tenantlistener的学说实体,该tenantlistlistener依赖于tenantContext,该tenantContext再次取决于教义EntityManager等。
我已经研究了类似的Symfony循环循环参考Dectrine onFlush事件侦听器服务的例外,但我的情况有所不同。theantcontext除了the the the the the the the the the the the the the the the the titymanager外,以许多不同的方式使用。
。我看不到解决这个圆圈的解决方案。我该如何解决?
您可能不想注入EntityManager
,而是将学说注册表注入您的tenant.service.tenant_context
服务:
services:
tenant.service.tenant_context:
class: TenantBundleContextTenantContext
arguments: [ "@doctrine" ]
有关如何访问TenantBundleContextTenantContext
类中EntityManager
实例的示例:
namespace TenantBundleContext
use SymfonyBridgeDoctrineRegistryInterface;
class TenantContext
{
protected $doctrine;
public function __construct(RegistryInterface $doctrine)
{
$this->doctrine = $doctrine;
}
public function getEntityManager()
{
return $this->doctrine->getEntityManager();
}
}