2016-08-29 4 views
1

У меня в настоящее время проблема с связью doctrine на моем проекте Symfony 3.Динамическая конфигурация Symfony Doctrine

здесь схема подключения к базе данных, что я должен выполнять:

1 - запрос на внешней базе данных, содержащей сервер, логин и базы данных приложения пароль

2 - расшифровывать пароль

3 - подключение конфигурации/доктрины

Не знаю, должен ли я работать над config.yml или другим способом?

Каков рекомендуемый метод в этом случае?

ответ

0

я сделал что-то подобное в проекте шахты, вот мой рабочий раствор:

Во-первых, определить пустое соединение в вашей 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(); 

И так далее

+0

Спасибо за ваш ответ! – Geo