& Quot; В то время как & Quot; и «повторить» петли в веточку

Есть ли хорошие способы использовать циклы while и repeat в Twig? Это такая простая задача, но без макросов я не могу найти ничего приятного и простого.

По крайней мере сделать бесконечный цикл, а затем нарушить его в состоянии?

РЕДАКТИРОВАТЬ:

Я имею в виду что-то вроде

do {
// loop code
} while (condition)

или же

while (condition) {
// loop code
}

Изменить 2:

Похоже, что он не поддерживается изначально по той же причине, что и не поддерживается. continue; или же break; заявления.

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

8

Решение

В двух словах: нет. Эта функциональность подразумевает расширенную логику, которая должна быть в вашей бизнес-логике, а не на уровне шаблонов. Это яркий пример разделения интересов в MVC.

Twig поддерживает for-loops полностью, что должно быть достаточно, если вы правильно кодируете — это те сложные условные решения о том, какие данные отображать, принимаются в бизнес-логике, которой они принадлежат, которые затем передают результирующий массив, «готовый к отображению», в шаблоны. Затем Twig поддерживает все приятные функции, необходимые только для рендеринга.

8

Другие решения

Я смог реализовать простой цикл в ветке. Итак, следующее заявление php:

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

при переводе на веточку это:

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

Это не временная петля, а потенциальный обходной путь. Лучшее предложение — оставить такую ​​бизнес-логику вне уровня шаблона.

7

Вы можете подражать этому с for ... in ... if используя достаточно высокий предел петли (10000?)

PHP:

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

Twig:

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

PHP:

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

Twig:

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

Это возможно, но немного сложнее.

Ты можешь использовать {% 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
По вопросам рекламы [email protected]