Twig检查对象内的对象

时间:2013-02-26 15:34:17

标签: symfony twig

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

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

这个问题是,每个条目都可以有多个投票(所以votes实际上是PersistentCollection。我知道我可以用PHP做到这一点,甚至可以循环遍历每个votes.user。 1}},但那太乱了。)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

尝试以下方法:

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

修改

似乎 in 运算符不能与Collection中的实例一起使用。我担心你需要迭代每次投票以检查两个用户是否匹配。

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

希望它有所帮助。