かなり簡単な場合、Symfony で URL に基づいて異なる Entity Manager / Connection を使用する。次のルーティング構成で
connection:
pattern: /a/{connection}
defaults: { _controller: AcmeTestBundle:User:index }
および次のクックブックから。
私のコントローラーは次のようになります。
class UserController extends Controller
{
public function indexAction($connection)
{
$products = $this->get('doctrine')
->getRepository('AcmeStoreBundle:Product', $connection)
->findAll()
;
..................
異なる em/connection/database から製品情報を取得できるようになります。
さて、このようなものをルーティングに追加すると;
login:
pattern: /a/{connection}/login
defaults: { _controller: FOSUserBundle:Security:login }
接続変数で定義されている接続を使用するようにログインを簡単に行うにはどうすればよいですか?
このセットアップでは、各データベースが独自のユーザー ログイン情報 (fos_user テーブル) を持っていることを前提としています。
編集:ルーティング情報を更新しました
編集2:
私はまだ PHP/Symfony/Doctrine に慣れていないので、ここで完全に間違っている場合はご容赦ください。FOS\UserBundle\Doctrine\UserManagerで接続を手動で設定しようとしました。以下はクラスのコンストラクタです
//
use Doctrine\Common\Persistence\ObjectManager;
//
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);
$this->objectManager = $om;
$this->repository = $om->getRepository($class);
$metadata = $om->getClassMetadata($class);
$this->class = $metadata->getName();
}
コントローラーでは、次のメソッドを使用して em を「testing」に変更できます。
$em = $this->get('doctrine')->getManager('testing');
$repository = $this->get('doctrine')->getRepository($class, 'testing')
そのために、コードを次のように変更して、ObjectManager の代わりに EntityManager を使用しました。
//
//use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\EntityManager;
//
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, EntityManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);
$this->objectManager = $om;
$this->repository = $om->getRepository($class);
$metadata = $om->getClassMetadata($class);
$this->class = $metadata->getName();
}
私のアプリはエラーなく正常に動作します。
コントローラーでの動作から、この行にパラメーターを追加して接続を変更しようとしましたが、まだデフォルトの接続を使用しています。
$this->repository = $om->getRepository($class, 'testing');
ここで他に何が欠けている可能性がありますか?