同じデータベースを使用するいくつかのプロジェクトに取り組み、すべての共通機能をマップする Symfony2 Bundle を作成しました。
問題は、2 つ目のデータベースがあり、最初のデータベースと同じ種類のサービスが必要なことです。
config.yml
doctrine:
dbal:
default_connection: main
connections:
main:
/* ... */
sub:
/* ... */
orm:
default_entity_manager: main
entity_managers:
main:
connection: main
mappings:
AcmeMainBundle: ~
sub:
connection: sub
mappings:
AcmeSubBundle: ~
auto_generate_proxy_classes: %kernel.debug%
@AcmeMainBundle > services.yml
services:
mainmanager:
class: Acme\MainBundle\MainManager
arguments: [ @doctrine.orm.entity_manager ]
Acme\MainBundle\MainManager
class MainManager
{
public function __construct(EntityManager $em)
{
$em->getRepository('AcmeMainBundle:Foo');
}
}
このセットは正常に動作します。適切な EntityManager に default_entity_manager
設定されているため、期待されるすべての結果が得られます。main
しかし、ここで問題です。
@AcmeSubBundle > services.yml
submanager:
class: Acme\SubBundle\SubManager
arguments: [ @doctrine.orm.entity_manager ]
Acme\SubBundle\SubManager
class SubManager
{
public function __construct(EntityManager $em)
{
$em->getRepository('AcmeSubBundle:Bar'); // Throws exception
}
}
不明なエンティティの名前空間エイリアス AcmeSubBundle
以降EntityManager
はmain
デフォルトで入ります。
私の質問は、特定のエンティティ マネージャーをservices.ymlの引数として挿入する「クリーンな」方法はありますか?