1

我在 Symfony 应用程序中有一个投票系统,我正在使用 Twig 引擎。我希望能够在我的模板中做这样的事情来向用户展示他们已经投票(想想 StackOverflow 橙色箭头)。

<div class="vote {% if entry.votes.user == loggedinuser %}already-voted{% endif %}">Vote</a>

问题在于,每个条目都可以有多个投票(votes实际上是一个PersistentCollection。我知道我可以用 PHP 甚至通过循环每个条目来做到这一点votes.user,但这很混乱)。

4

2 回答 2

1

您可以向您的实体添加一个方法,以便您的模板保持干净,并将业务逻辑隐藏在实体中,类似于:

<div class="vote {% if entry.hasVoted(loggedinuser) %}already-voted{% endif %}">Vote</a>
于 2013-02-26T20:37:46.327 回答
0

您可以使用in运算符,而不是遍历每个投票实例。根据 Twig 文档,in过滤器将对实现 Traversable 接口的字符串、数组或对象执行包含测试。

尝试以下操作:

<div class="vote {% if loggedinuser in entry.votes.user %}already-voted{% endif %}">Vote</a>

编辑:

似乎in运算符不适用于集合内的实例。恐怕您需要遍历每个投票以检查两个用户是否匹配。

为了防止事情变得混乱,您可以使用

希望能帮助到你。

于 2013-02-26T17:42:41.560 回答