2012-02-03 12 views
5

依存関係注入を使用してエンティティリポジトリにサービスを注入するにはどうすればよいですか?エンティティリポジトリにサービスを注入する方法Symfony2 doctrine?

私はこのようにしてみてください:

<service id="rp.repository.user" class="RP\CoreBundle\Repository\UserRepository" 
factory-service="doctrine.orm.entity_manager" factory-method="getRepository"> 
    <call method="setSecurityContext"> 
    <argument type="service" id="security.context"/> 
    </call> 
</service> 

が、それは懸念の分離を壊すので、Plzをリポジトリにサービスを注入

+0

私はそれが良いものかどうかをしたいのか分かりません。私はリポジトリにセキュリティコンテキストにアクセスして、現在のユーザがrole_userを持っているかどうか、またはすべてのdqlリクエストでいくつかのフィルタを追加するかどうかを確認したい。 DIのことでは、エンティティマネージャがgetRepository関数を呼び出して要求されたリポジトリをインスタンス化し、コンテナから取得せず、誰かがこの問題のアイデアを持っているため、不可能です。多くの場合、 – EAdel

答えて

8

を助ける と呼ばれることはありませんですsetSecurityContextは、推奨されません。代わりに、リポジトリを呼び出すサービスクラスを使用する必要があります。あなたのコメントに基づいて、簡単なワークフローは次のようになります:

  • UserServiceクラスを定義してサービスとして登録してください。 UserService
  • を注入security.contextUserService::getUsers()を定義します(またはものは何でも、あなたはメソッドになりたいです)。この方法では、security.contextを使用してクエリの条件を設定します。条件を直接UserRepository::getUsers()メソッドに渡すか、またはUserServiceオブジェクトにDQLを作成してUserRepositoryに渡すことができます。
  • UserService::getUsers()は、UserRepository::getUsers()が返すものを返します。

これは私がこれらのような状況を処理する方法ですが、完全性のために、リポジトリに簡単なセッタ注入を使用することもできます。エンティティマネージャを介してリポジトリを取得します(質問のようにサービスコンテナからは取得しません)。単に$userRepository->setSecurityContext($this->get('security.context'))を呼び出します。

+0

と例外的に例外が必要ですか? – GorillaApe

関連する問題