1

在 Symfony2.1 项目中,如何在模板中调用自定义实体函数?详细说明,请考虑以下场景;有两个具有多对多关系的实体:用户和类别。

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 回答