想象一下这个场景:
- 有用户和组。还有一个 Membership 实体来映射 ManyToMany 关系
- 用户可以创建、加入、离开和向他们所属的组发送评论。
应用程序中有几个“主要”模板:
- 上次更新的群组
- 登录用户所属的组
- 其他组列表页面,例如搜索结果
还有一个“迷你组”模板,显示#members、#comments 等信息,如果当前登录用户是成员、有评论或创建了组,则标记
主要模板是循环构建的,包括迷你组模板。
minigroup 模板需要知道用户是否是成员,是否有评论等...
你将如何管理这个逻辑?
- 获取控制器中涉及组列表的每个操作的所有数据
- 一个实体方法,它返回一个用户是成员的 id 数组,或者有评论等。
- 登录时将此数组存储在会话中,并在用户评论、加入、离开时更新它...
您将如何让 minigroup 模板了解这些案例。
- 每个 minigroup 都可以从 include 语句中接收一些布尔值“isMember”“hasComments”
- 每个迷你组可以接收用户所属的组列表、评论列表等。然后检查当前组 ID 是否在该列表中
现在我已经实现了实体方法和布尔标志,但我不确定是否有更惯用或更有效的方式来实现它。
{% set userGroups = app.user ? app.user.participatedGroupIds : {} %}
{% set userComments = app.user ? app.user.commentedGroupIds : {} %}
{% for group in groups %}
{% set vars = {'isMember':group.id in userGroups, 'hasComments':group.id in userComments} %}
{% include 'GroupBundle:Default:minigroup.html.twig' with vars %}
{% endfor %}
您将如何处理这种情况?
你知道更好的播种方法吗?
谢谢!