1

私はSymfonyアプリケーションに投票システムを持っており、TwigEngineを使用しています。テンプレート内でこのようなことを実行して、既に投票したユーザーを表示できるようにしたいと思います(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 に答える