【发布时间】:2017-01-05 12:17:55
【问题描述】:
我目前在我的 Symfony 3 项目中遇到教义连接问题。
这是我应该实现的数据库连接图:
1 - 请求包含服务器、登录名和应用程序数据库密码的外部数据库
2 - 解密密码
3 - 配置/学说连接
我不知道我应该使用config.yml 还是使用其他方法?
在这种情况下推荐的方法是什么?
【问题讨论】:
标签: php symfony doctrine-orm doctrine
我目前在我的 Symfony 3 项目中遇到教义连接问题。
这是我应该实现的数据库连接图:
1 - 请求包含服务器、登录名和应用程序数据库密码的外部数据库
2 - 解密密码
3 - 配置/学说连接
我不知道我应该使用config.yml 还是使用其他方法?
在这种情况下推荐的方法是什么?
【问题讨论】:
标签: php symfony doctrine-orm doctrine
我在我的一个项目中做过类似的事情,这是我的工作解决方案:
首先,在 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();
等等
【讨论】: