1

Symfony 2.2 でアプリケーションを構築しています。

エンティティの 1 つにカスタム リポジトリ クラスを使用しています。私はそれを次のように含めます:

@ORM\Entity(repositoryClass="MyApp\MainBundle\Entity\CategoryRepository")

他の 2 つのリポジトリ クラスのカテゴリ エンティティでメソッドを使用したいと考えています。

 @ORM\Entity(repositoryClass="Gedmo\Sortable\Entity\Repository\SortableRepository")
 @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")

ただし、エンティティは 1 つの repositoryClass のみを想定しています。これら 3 つのリポジトリすべてを同じエンティティに使用するにはどうすればよいですか?

4

2 に答える 2

2

エンティティごとに 1 つのリポジトリしか持てないと思います。だからあなたは参照しました ORM\Entity(repositoryClass="MyApp\MainBundle\Entity\CategoryRepository")

リポジトリ内で別のリポジトリを使用する必要がある場合は、

これらのリポジトリの EntityManager を取得できます (同じでない場合)。$em2 = whatEverIsTheEntity()

これで、CategoryRepository に、使用するリポジトリ内のメソッドへのプロキシ メソッドを含めることができます。例: $em2->getMethodFromEm2().

注:しかし、本当に必要でない限り、上記の解決策は好みません。Doctrine Entity Manager を Dependency Injected として持つサービス層を作成したいと思います。このサービス層は、すべてのリポジトリに接続し、達成したい最終結果を収集します (コントローラーで使用するため)。このようにして、コードはよりクリーンでテストしやすくなります。

お役に立てれば。

于 2013-05-15T20:28:49.060 に答える
1

リポジトリはクラス (つまりエンティティ) で予約されています。スーパークラスから継承する場合 (それらのクラスが直接継承しない場合でも、リポジトリは継承できます)、リポジトリ ( CategoryRepository) を他の 2 つ (PHP では複数のクラスが許可されていないため、一方は他方を拡張します) で拡張できます。拡大)。

かなりそのようなもの

class NestedTreeRepository extends SortableRepository
{
}

class CategoryRepository extends NestedTreeRepository 
{
}

これがあなたのニーズに合っているかどうかはわかりませんが、これはあなたがここでやろうとしていることを理解するための方法です(そして、それが唯一のものであっても驚かないでしょう)

于 2013-05-15T09:19:25.237 に答える