以前、 FOSUserBundleに複数のエンティティマネージャーを使用することについて質問しましたが、FOSUserBundleが(部分的に)それをサポートしていることがわかりました。ここmodel_manager_name
で説明するように、必要なのは、パラメーターで使用する接続/マネージャーを指定することだけです。
fos_user:
# ........
model_manager_name: account1
サンプルapp/config / config.yml
これにより、FOSUserBundleはaccount1
接続を使用し、その接続のデータベース内のユーザー情報を使用します。
doctrine:
dbal:
default_connection: default
connections:
account2:
dbname: account2
user: account2
password: password2
driver: pdo_mysql
host: localhost
port: ~
charset: UTF8
account1:
dbname: account1
user: account1
password: password1
driver: pdo_mysql
host: localhost
port: ~
charset: UTF8
default:
dbname: account
user: account
password: password
driver: pdo_mysql
host: localhost
port: ~
charset: UTF8
私のアプリでは、ユーザーが(たとえば)http://myapp.com/a/account1にアクセスすると、アプリはaccount1
接続を使用し、http://myapp.com/a/account2にアクセスaccount2
するとの接続を使用する必要があります。 。私のアプリケーションのロジックでは、次のようなものを使用できるため、これはコントローラーから簡単に実行できます。
$em = $this->get('doctrine')->getManager('account2');
$repository = $this->get('doctrine')->getRepository($class, 'account2')
ただし、ログイン部分については、それほど簡単ではありません。model_manager_name
FOSUserBundleはサービスコンテナとして実行されますが、の値を動的に変更する場所/方法がわかりません。FOS\UserBundle\DependencyInjection\FOSUserExtension
私はその値を次のように手動で変更できることを知っています。
class FOSUserExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$processor = new Processor();
$configuration = new Configuration();
$config = $processor->processConfiguration($configuration, $configs);
$config['model_manager_name'] = 'account2';
// .................
何かご意見は?