web-dev-qa-db-ja.com

「While」と「repeat」はTwig

Twigでwhileループとrepeatループを使用する良い方法はありますか?とても簡単な作業ですが、マクロがないと、素晴らしくシンプルなものを見つけることができません。

少なくとも無限のサイクルを実行してから、ある状態でそれを壊しますか?

編集:

私は次のようなものを意味します

do {
    // loop code
} while (condition)

または

while (condition) {
    // loop code
}

編集2:

twigどちらもサポートされていないのと同じ理由で、ネイティブにサポートされていないようですcontinue;またはbreak;ステートメント。

https://github.com/twigphp/Twig/issues/654

9
Aistis

一言で言えば:いいえ。この機能は、テンプレートレイヤーではなく、ビジネスロジックに存在する必要がある高度なロジックを意味します。これは、MVCにおける関心の分離の代表的な例です。

Twigは for- loops を完全にサポートします。これは、正しくコーディングすれば十分です。表示するデータに関する複雑な条件付き決定は、それらが属するビジネスロジックで行われ、その後渡されます。結果の配列は、テンプレートに「レンダリングする準備ができています」。 Twigは、レンダリングにのみ必要なすべてのニース機能をサポートします。

8

小枝に単純なforループを実装することができました。したがって、次のphpステートメント:

for ($x = 0; $x <= 10; $x++) {
    echo "The number is: $x <br>";
}

twigに変換すると:

{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

これはwhileループではなく、潜在的な回避策です。最良の提案は、このようなビジネスロジックをテンプレートレイヤーから除外することです。

10
DslDip

十分に高いループ制限(10000?)を使用して、for ... in ... ifでエミュレートできます。

一方

PHP:

$precondition = true;
while ($precondition) {
    $precondition = false;
}

小枝:

{% set precondition = true %}
{% for i in 0..10000 if precondition %}
    {% set precondition = false %}
{% endfor %}

一方を行います

PHP:

do {
    $condition = false;
} while ($condition) 

小枝:

{% set condition = true %} {# you still need this to enter the loop#}
{% for i in 0..10000 if condition %}
    {% set condition = false %}
{% endfor %}
10
fregante

これは可能ですが、少し複雑です。

{% include ... %}を使用して、ネストされた配列を処理できます。これは、私が読んだコメントから、実行する必要があることです。

次のコードについて考えてみます。

nested_array_display.html

<ul>
{% for key, val in arr %}
    <li>
        {{ key }}:
{% if val is iterable %}
{% include 'nested_array_display.html' %}
{% else %}
        {{ val }}
{% endif %}
    </li>
{% endfor %}
</ul>
1
Xesau