php Twig中的“While”和“repeat”循环

e0bqpujr  于 2022-11-21  发布在  PHP
关注(0)|答案(5)|浏览(152)

在Twig中有什么好的方法来使用while和repeat循环吗?这是一个很简单的任务,但是没有宏,我找不到任何好的和简单的东西。
至少做一个无限循环,然后在一个条件下打破它?
编辑:
我的意思是

do {
    // loop code
} while (condition)

while (condition) {
    // loop code
}

编辑二:
看起来twig本身不支持它,原因与continue;break;语句都不支持它相同。
https://github.com/twigphp/Twig/issues/654

e4yzc0pl

e4yzc0pl1#

您可以使用足够高的循环限制(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 %}
lawou6xi

lawou6xi2#

简而言之:这个功能暗示了高级逻辑,它应该在你的业务逻辑中,而不是在模板层中。这是MVC中关注点分离的一个最好的例子。
Twig完全支持for -loops,如果你的代码编写正确,这应该足够了--复杂的条件决定显示哪些数据是在它们所属的业务逻辑中做出的,然后将得到的数组“ready to render”传递给模板。然后Twig支持所有只需要渲染的好特性。

bweufnob

bweufnob3#

我可以在twig中实现一个简单的for循环。所以下面的php语句:

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

翻译成twig就是:

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

这不是一个while循环,而是一个潜在的解决方案。最好的建议是将这样的业务逻辑排除在模板层之外。

zzoitvuj

zzoitvuj4#

这是可能的,但有点复杂。
您可以使用{% 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>
pxy2qtax

pxy2qtax5#

带有“定量环上限”的顶层溶液警告:当条件返回false时,循环并不中断,它只是不进入循环。因此循环一直运行到最高索引

相关问题