私は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 を自分のやり方で設定できますか?