繁体   English   中英

Symfony 4动态数据库连接和FOS用户

[英]Symfony 4 dynamic database connection & FOS User

使用Symfony 4 ,我们正在构建一个多客户应用程序 ,其中每个客户都有一个专用的数据库。 创建新客户时,将自动按需创建客户数据库。 在此过程中,我们将创建唯一的额外.env文件(特定于客户),该文件包含数据库连接凭据。

我们有2x数据库连接和2x实体管理器commoncustomer customer实体经理实际上是默认的。 显然, customer实体经理一开始没有正确的连接参数。 我们根据内核请求相应地(例如基于域)加载额外的.env文件,并相应地设置customer连接和实体管理器:

$connection = $this->entityManager->getConnection();
$connection->close();

$reflectionConn   = new \ReflectionObject($connection);
$reflectionParams = $reflectionConn->getProperty('params');
$reflectionParams->setAccessible(true);

$params             = $reflectionParams->getValue($connection);
$params['dbname']   = $database; // read from the customer specific .env
$params['user']     = $username; // read from the customer specific .env
$params['password'] = $password; // read from the customer specific .env

$reflectionParams->setValue($connection, $params);
$reflectionParams->setAccessible(false);

$this->entityManager = $this->entityManager->create(
    $this->entityManager->getConnection(),
    $this->entityManager->getConfiguration()
);

这样很好!

问题是安全上下文(?)-我们使用的是FosUserBundle,它无法授权用户。 我猜上面的代码不足以影响安全上下文。

使用标准的FosUserBundle实现动态数据库连接+用户授权的目标的正确方法是什么?

该问题根本与安全上下文无关。 问题(傻)是我的内核请求侦听器具有默认优先级(0),这使登录侦听器发生后整个客户配置加载和连接设置。

将其设置为512(应该足够)以在SessionListener之前启动

暂无
暂无

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

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