я сделал что-то подобное в проекте шахты, вот мой рабочий раствор:
Во-первых, определить пустое соединение в вашей config.yml
dynamic_con:
dbname: ~
user: ~
password: ~
host: ~
charset: UTF8
Теперь, я написал PostLoginController
, который всегда будет вызываться после успешного входа в систему.
Там я получаю данные о соединении и звоню с моим DynamicDatabaseService
.
У меня DynamicDatabaseService
есть следующая функция, которая построит мое соединение с предоставленными данными.
public function getDynamicDatabase()
{
// $this->doctrine was given to the service in the constructor beforehand
$dynamicCon = $this->doctrine->getConnection('dynamic_con');
$refCon = new \ReflectionObject($dynamicCon);
$refParams = $refCon->getProperty('_params');
$refParams->setAccessible('public');
if($params == false){
$defaultCon = $this->doctrine->getConnection('default');
$params = $refParams->getValue($dynamicCon);
// You need to inject your Params to the function or implement some further logic to receive your connection parameters to use them here.
$params['dbname'] = $dbName;
$params['user'] = $dbUser;
$params['password'] = $dbPass;
$params['host'] = $dbHost;
}
$refParams->setValue($dynamicCon,$params);
$refParams->setAccessible('private');
return $dynamicCon;
}
Теперь вы можете работать с $dynamicCon
как обычный PDO подключения, так
$dynamicCon->prepare("SELECT * FROM USERS WHERE id = :id");
$dynamicCon->bindValue(":id", $id);
$dynmicCon->execute();
И так далее
Спасибо за ваш ответ! – Geo