Próbuję użyć prostej pętli, w moim prawdziwym kodzie ta pętla jest bardziej złożona i potrzebuję break
tej iteracji, takiej jak:
{% for post in posts %}
{% if post.id == 10 %}
{# break #}
{% endif %}
<h2>{{ post.heading }}</h2>
{% endfor %}
Jak mogę używać zachowania break
lub continue
struktur kontrolnych PHP w Twig?
first
filtru twig: twig.sensiolabs.org/doc/filters/first.htmlset break = true
zostanie wykonane, chyba że umieścisz to welse
instrukcji. Zobacz twigfiddle.com/euio5wset break = true
na samym końcu . Ale tak, to zależy od twojego kodu, więc dziękuję za wspomnienie o tym w celu wyjaśnieniaZ dokumentów TWIG docs :
Ale nadal:
Przykład 1 (dla ogromnych list można filtrować wiadomości za pomocą plasterka ,
slice(start, length)
):Przykład 2:
Możesz nawet użyć własnych filtrów TWIG dla bardziej złożonych warunków, takich jak:
źródło
{% for post in posts|slice(0,10) %}
Unlike in PHP, it's not possible to break or continue in a loop.
czytaniem dokumentów. Ale myślę, żebreak
icontinue
jest to dobrafor
powinna dać się złamać po pierwszym trafieniu. Odpowiedź @VictorBocharsky'ego jest prawidłowa{% for post in posts|slice(0,10) %}
do tworzenia ogromnych list. Zobacz mój pierwszy komentarz. Zaktualizowałem również moją odpowiedź.Sposób, aby móc używać
{% break %}
lub{% continue %}
pisaćTokenParser
dla nich.Zrobiłem to dla
{% break %}
tokena w poniższym kodzie. Możesz bez wielu modyfikacji zrobić to samo dla{% continue %}
.AppBundle \ Twig \ AppExtension.php :
AppBundle \ Twig \ BreakToken.php :
AppBundle \ Twig \ BreakNode.php :
Następnie możesz po prostu użyć,
{% break %}
aby wyjść z pętli w następujący sposób:Aby pójść jeszcze dalej, możesz napisać parsery tokenów dla
{% continue X %}
i{% break X %}
(gdzie X jest liczbą całkowitą> = 1), aby uzyskać / kontynuować wiele pętli, jak w PHP .źródło
squirrelphp/twig-php-syntax
Biblioteka zapewnia{% break %}
,{% break n %}
i{% continue %}
tokeny.Z komentarza @NHG - działa idealnie
źródło
Znalazłem dobre obejście, aby kontynuować (uwielbiam powyższą próbkę przerwy). Tutaj nie chcę wymieniać „agencji”. W PHP "kontynuuję", ale w gałązce wymyśliłem alternatywę:
LUB po prostu go pomijam, jeśli nie spełnia moich kryteriów:
źródło