【发布时间】:2014-05-27 16:49:01
【问题描述】:
我正在开发一个多租户应用程序。租户在请求侦听器中解析,看起来或多或少类似于以下内容:
/**
* @Service
* @Tag(name="kernel.event_listener", attributes={"event": "kernel.request", "method": "onRequest"})
*/
class TenantResolverListener extends ContainerAware
{
public function onRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
// some magic stuff to detect tenant...
$tenant = new Tenant($request->getHost());
$this->container->set('tenant', $tenant);
}
}
为了在我的应用程序的任何位置轻松访问租户配置,我想到了将租户注册为依赖项容器中的依赖项的想法。
这里的问题是,“租户依赖”在编译时是未知的,我不能将它直接注入到其他服务中。 (我必须注入容器并通过容器($this->container->get('tenant'))访问租户配置)。
我认为这根本不是最好的解决方案,但我不太确定如何解决这个问题。我的想法是:
- 注册一个默认租户,稍后将在 TenantResolver 中覆盖该租户。
- 更早地在任何地方检测当前租户,但在哪里/如何检测?
- 不要将租户配置放入容器中
- 并将配置包装在自己的服务中,该服务定位当前租户并返回配置。 (
$tenantResolver->getConfig())。 - 和...?
- 并将配置包装在自己的服务中,该服务定位当前租户并返回配置。 (
如果有人有这方面的经验,很乐意给我一些提示。
谢谢!
【问题讨论】:
标签: symfony dependency-injection multi-tenant