0

私は2つのdbal接続を持っています。1 つは config.yml で定義される静的で、もう 1 つは動的に定義されます。コントローラーで必要な場合は、ホスト、データベース名、パスワードなどの接続パラメーターを設定します...

ログイン チェック アクションを実行する直前 (またはこのアクション内) に動的接続を設定する必要があります。これは、私の「ユーザー」エンティティが 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」アクション コードを変更して、Entity Manager を自分のやり方で設定できますか?

4

1 に答える 1