私は、ユーザーがアカウントに関連付けられているアプリケーションを構築しています(たとえば、複数のユーザーがすべてアカウントを共有しています)。次に、他のエンティティ-製品がアカウントに関連付けられていると呼びましょう。製品はアカウントに関連付けられており、そのアカウントに関連付けられているユーザーのみが製品を編集できます。
私の場合の違いは、同じモデルで共有されている多くの異なるエンティティがあります。
それが1つの(製品)エンティティである場合、次のようなメソッドがProductRepositoryにあることは問題ではありません。
public function checkOwnership($id, $account)
{
$count = $this->createQueryBuilder('s')
->select('count(s.id)')
->where('s.account = :acc')
->andWhere('s.id = :id')
->setParameters(array('id' => $id, 'acc' => $account))
->getQuery()
->getSingleScalarResult();
if($count == 0)
throw $this->createNotFoundException('ye..');
return;
}
製品のIDがユーザーのアカウントに関連付けられていることを確認します。
account引数は、次を使用してこの関数に渡されます。
$this->getUser();
コントローラ内。
コードの重複を防ぐために、この関数を他のエンティティで利用できるようにするための最良の方法は何ですか?(現在)他のエンティティは3つしかないため、各リポジトリにそれを置くだけで世界の終わりにはなりませんが、「共通」またはグローバルリポジトリを作成する方法があるかどうか疑問に思っています。良い基準に従っていますか?ぜひ知りたいです。
編集:
それとも私はこれを完全に考えすぎたのでしょうか?「MainBundle」に「Common」ディレクトリを作成し、名前空間を定義して、関数へのアクセスが必要なコントローラーの先頭にuseステートメントを追加できますか?