我有两个 dbal 连接。一种是静态的,在 config.yml 中定义,一种是动态定义。当我在控制器中需要它时,我会设置连接参数,例如主机、数据库名称、密码等......
我需要在执行登录检查操作(或在此操作中)之前设置动态连接。这是因为我的“用户”实体根据 URL 在不同的数据库中。所以我不能把动态连接定义放在 config.yml 文件中。
我使用该方法来设置我需要的实体管理器:
public function switchConnection($connectionParam=array())
{
$conn = array_merge(
array('host'=>'127.0.0.1', 'port'=>'3306', 'dbName'=>'myDatabaseName', 'user'=>'myUser', 'pass'=>'myPass', 'driver'=>'pdo_mysql', 'connection'=>'default', 'em'=>'default')
, $connectionParam);
$dbalConnectionTo=sprintf('doctrine.dbal.%s_connection', $conn['connection']);
$connection = $this->container->get($dbalConnectionTo);
$connection->close();
$refConn = new \ReflectionObject($connection);
$refParams = $refConn->getProperty('_params');
$refParams->setAccessible('public');
$params = $refParams->getValue($connection);
$params['dbname'] = $conn['dbName'];
$params['user'] = $conn['user'];
$params['host'] = $conn['host'];
$params['port'] = $conn['port'];
$params['password'] = $conn['pass'];
$params['driver'] = $conn['driver'];
$params['charset']='UTF8';
$refParams->setAccessible('private');
$refParams->setValue($connection,$params);
$this->container->get('doctrine')->resetEntityManager($conn['em']);
return;
}
我可以更改“login_check”操作代码以按我的方式设置实体管理器吗?