4

Symfony2 プロジェクトでControllerを使用すると、 onを呼び出すことでDoctrineにアクセスできます。getDoctrine()this

$this->getDoctrine();

このようにして、Doctrine Entity のリポジトリにアクセスできます。

Symfony2 プロジェクトに汎用 PHP クラスがあるとします。どうすればDoctrineを取得できますか? そのようなサービスがあると思いますが、どのサービスかわかりません。

4

2 に答える 2

11

このクラスをサービスとして登録し、他のサービスを注入できます。次のような 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。利用可能なすべてのサービスとそのエイリアスおよびクラスが一覧表示されます。

于 2012-08-10T17:29:54.807 に答える