Я пытаюсь использовать простой цикл, в моем реальном коде этот цикл более сложный, и мне нужна break
эта итерация, например:
{% for post in posts %}
{% if post.id == 10 %}
{# break #}
{% endif %}
<h2>{{ post.heading }}</h2>
{% endfor %}
Как я могу использовать поведение управляющих структур PHP break
или continue
управляющих структур PHP в Twig?
first
фильтр веточки: twig.sensiolabs.org/doc/filters/first.htmlset break = true
будет выполнено, если вы не поместите это вelse
оператор. См. Twigfiddle.com/euio5wset break = true
в самом конце . Но да, это зависит от вашего кода, поэтому спасибо, что упомянули его для пояснения,Из документов TWIG docs :
Но все равно:
Пример 1 (для больших списков можно фильтровать сообщения , используя фрагмент ,
slice(start, length)
):Пример 2:
Вы даже можете использовать собственные фильтры TWIG для более сложных условий, например:
источник
{% for post in posts|slice(0,10) %}
Unlike in PHP, it's not possible to break or continue in a loop.
когда читал документы. Но я думаюbreak
иcontinue
есть хорошие черты, которые нужно было бы добавитьfor
должен быть разбитым после первого нажатия. @VictorBocharsky - правильный ответ{% for post in posts|slice(0,10) %}
для огромных списков. См. Мой первый комментарий. Я также обновил свой ответ.Способ использовать
{% break %}
или{% continue %}
- написатьTokenParser
за них.Я сделал это для
{% break %}
токена в приведенном ниже коде. Вы можете без особых модификаций сделать то же самое для{% continue %}
.AppBundle \ Twig \ AppExtension.php :
AppBundle \ Twig \ BreakToken.php :
AppBundle \ Twig \ BreakNode.php :
Затем вы можете просто использовать
{% break %}
для выхода из циклов следующим образом:Чтобы пойти еще дальше, вы можете написать парсеры токенов для
{% continue X %}
и{% break X %}
(где X - целое число> = 1) для выхода / продолжения нескольких циклов, как в PHP .источник
squirrelphp/twig-php-syntax
Библиотека предоставляет{% break %}
,{% break n %}
и{% continue %}
жетоны.Из комментария @NHG - отлично работает
источник
Я нашел хороший обходной путь для продолжения (мне нравится приведенный выше образец перерыва). Здесь я не хочу перечислять «агентства». В PHP я бы "продолжил", но в веточке я придумал альтернативу:
ИЛИ Я просто пропускаю его, если он не соответствует моим критериям:
источник