Symfony2 プロジェクトでControllerを使用すると、 onを呼び出すことでDoctrineにアクセスできます。getDoctrine()
this
$this->getDoctrine();
このようにして、Doctrine Entity のリポジトリにアクセスできます。
Symfony2 プロジェクトに汎用 PHP クラスがあるとします。どうすればDoctrineを取得できますか? そのようなサービスがあると思いますが、どのサービスかわかりません。
このクラスをサービスとして登録し、他のサービスを注入できます。次のような GenericClass.php があるとします。
class GenericClass
{
public function __construct()
{
// some cool stuff
}
}
これをサービスとして (通常はバンドル内にResources/config/service.yml|xml
) 登録し、Doctrine のエンティティーマネージャーをそれに注入できます:
services:
my_mailer:
class: Path/To/GenericClass
arguments: [doctrine.orm.entity_manager]
そして、(デフォルトで) のコンストラクターにエンティティーマネージャーを注入しようとしますGenericClass
。したがって、引数を追加するだけです:
public function __construct($entityManager)
{
// do something awesome with entity manager
}
アプリケーションの DI コンテナで利用できるサービスがわからない場合は、コマンド ライン ツールを使用して調べることができますphp app/console container:debug
。利用可能なすべてのサービスとそのエイリアスおよびクラスが一覧表示されます。