2016-08-29 6 views
1

Ich habe derzeit ein Problem mit der Doktrin-Verbindung in meinem Symfony 3-Projekt.Symfony-Doktrin Dynamische Konfiguration

hier ist der Anschlussplan zu der Datenbank, die ich umsetzen soll:

1 - Anfrage auf einer externe Datenbank

2 das Server, Login und Anwendungsdatenbank Passwort enthält - entschlüsseln Passwort

3 - Konfiguration/Doktrin Verbindung

Ich weiß nicht, ob ich lieber auf config.yml oder mit einer anderen Methode arbeiten soll?

Was ist die empfohlene Methode in diesem Fall?

Antwort

0

ich etwas ähnliches in einem Projekt von mir gemacht haben, hier ist meine Arbeitslösung:

zunächst eine leere Verbindung in Ihr config.yml

dynamic_con: 
    dbname: ~ 
    user:  ~ 
    password: ~ 
    host:  ~ 
    charset: UTF8 

Jetzt definieren, habe ich geschrieben ein PostLoginController, die immer nach einer erfolgreichen Anmeldung aufgerufen wird.

Dort bekomme ich meine Verbindungsdaten und rufe meine DynamicDatabaseService damit an.

Meine DynamicDatabaseService hat die folgende Funktion, die meine Verbindung mit den bereitgestellten Daten aufbauen wird.

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; 
} 

Jetzt können Sie mit dem $dynamicCon als normaler PDO-Verbindung arbeiten, so

$dynamicCon->prepare("SELECT * FROM USERS WHERE id = :id"); 
$dynamicCon->bindValue(":id", $id); 
$dynmicCon->execute(); 

Und so weiter

+0

Vielen Dank für Ihre Antwort! – Geo

Verwandte Themen