1

Symfony2.1 プロジェクトで、テンプレート内でカスタム エンティティ関数を呼び出す方法は? 詳しく説明するには、次のシナリオを考えてください。多対多の関係を持つ 2 つのエンティティがあります: ユーザーとカテゴリです。

Doctrine2 はそのようなメソッドを生成しました:

$user->getCategories();
$category->getUsers();

したがって、次のような小枝でこれらを使用できます。

{% for category in categories %}
   <h2>{{ category.name }}</h2>
   {% for user in category.users %}
      {{ user.name }}
   {% endfor %}
{% endfor %}

しかし、カスタム関数を使用してユーザーを獲得するにはどうすればよいでしょうか? たとえば、いくつかのオプションを使用してユーザーを一覧表示し、次のように日付で並べ替えたいとします。

{% for user in category.verifiedUsersSortedByDate %}

このためのカスタム関数を UserRepository.php クラス内に記述し、それを Category.php クラスに追加して機能させようとしました。ただし、次のエラーが発生しました。

テンプレートのレンダリング中に例外がスローされました (「警告: Doctrine\ORM\EntityRepository::__construct() の引数 1 がありません。

4

2 に答える 2

3

verifiedUsersSortedByDateコントローラー内で直接取得してからテンプレートに渡す方がはるかにクリーンです。

//...
 $verifiedUsersSortedByDate = $this->getYourManager()->getVerifiedUsersSortedByDate();

return $this->render(
    'Xxx:xxx.xxx.html.twig',
    array('verifiedUsersSortedByDate' => $verifiedUsersSortedByDate)
);

エンティティで余分な作業を行わないように十分に注意する必要があります。ドキュメントで引用されているように、「エンティティはデータを保持する基本クラスです」。エンティティでの作業をできるだけ基本的なものに保ち、すべての「ロジック」を 内に適用しますentityManagers

コードで迷子になりたくない場合は、この種の形式を順番に (エンティティからテンプレートへ) 従うのが最善です。

1 - Entity. (Holds the data)

2 - Entity Repositories. (Retrieve data from database, queries, etc...)

3 - Entity Managers (Perform crucial operations where you can use some functions from your repositories as well as other services.....All the logic is in here! So that's how we can judge if an application id good or not)

4 - Controller(takes request, return responses by most of the time rendering a template)

5 - Template (render only!)
于 2013-01-20T16:12:30.817 に答える
0

リポジトリを介してコントローラー内のユーザーを取得する必要があります

$em = $this->getDoctrine()->getEntityManager();
$verifiedusers = $em->getRepository('MYBundle:User')->getVerifiedUsers();

 return array(
            'verifiedusers'      => $verifiedusers,
                   );
    }
于 2013-01-21T02:58:31.917 に答える