2013-02-26 128 views
1

我在Symfony應用程序中有一個投票系統,我使用的是Twig引擎。我希望能夠在我的模板中做這樣的事情,以顯示他們已經投票的用戶(想想StackOverflow橙色箭頭)。Twig檢查對象中的對象

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

這樣做的問題是,雖然,每個條目可以有多個票(所以votes實際上是一個PersistentCollection。我知道我可以用PHP甚至通過每個votes.user的循環做到這一點,但是那雜亂) 。

回答

1

你可以的方法添加到您的實體,這樣你的模板將保持清潔和業務邏輯會被藏在類似實體:

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

最終,這可能是我找到的最佳解決方案。 – Prisoner 2013-03-06 15:29:43

0

您可以使用 in運算符來代替迭代每個投票實例。 根據Twig文檔,中的過濾器將對實現Traversable接口的字符串,數組或對象執行包容性測試。

嘗試以下操作:

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

編輯:

這似乎是一個集內的實例操作doesn't工作。恐怕你需要迭代每個投票來檢查兩個用戶是否匹配。

爲了防止事情變得凌亂,您可以使用macro

希望它有幫助。

+0

我不能用'in'因爲沒有按票沒有方法/屬性'user',給我:'方法「user」對象「Doctrine \ ORM \ PersistentCollection」不存在' – Prisoner 2013-02-26 17:52:16

+0

如果我在entry.votes中使用'user(應該在技術上工作)沒有任何條件進入。 – Prisoner 2013-02-26 17:54:19

+0

我編輯了我的答案。 – 2013-02-26 18:29:29