J'essaye d'utiliser une boucle simple, dans mon vrai code cette boucle est plus complexe, et j'ai besoin de break
cette itération comme:
{% for post in posts %}
{% if post.id == 10 %}
{# break #}
{% endif %}
<h2>{{ post.heading }}</h2>
{% endfor %}
Comment puis-je utiliser le comportement de break
ou continue
des structures de contrôle PHP dans Twig?
first
filtre Twigset break = true
- dessous sera exécuté à moins que vous ne le mettiez dans uneelse
instruction. Voir twigfiddle.com/euio5wset break = true
à la toute fin . Mais oui, cela dépend de votre code, alors merci de l'avoir mentionné pour clarifierÀ partir de docs TWIG docs :
Mais reste:
Exemple 1 (pour les listes volumineuses, vous pouvez filtrer les publications en utilisant slice ,
slice(start, length)
):Exemple 2:
Vous pouvez même utiliser vos propres filtres TWIG pour des conditions plus complexes, comme:
la source
{% for post in posts|slice(0,10) %}
Unlike in PHP, it's not possible to break or continue in a loop.
lecture de la documentation. Mais je pensebreak
etcontinue
c'est une bonne fonctionnalité, qu'il faudrait ajouterfor
devrait être cassable après le premier coup. La réponse de @VictorBocharsky est juste{% for post in posts|slice(0,10) %}
pour de grandes listes. Voir mon premier commentaire. J'ai également mis à jour ma réponse.Une façon de pouvoir utiliser
{% break %}
ou{% continue %}
est d'écrire desTokenParser
s pour eux.Je l'ai fait pour le
{% break %}
jeton dans le code ci-dessous. Vous pouvez, sans trop de modifications, faire la même chose pour le{% continue %}
.AppBundle \ Twig \ AppExtension.php :
AppBundle \ Twig \ BreakToken.php :
AppBundle \ Twig \ BreakNode.php :
Ensuite, vous pouvez simplement utiliser
{% break %}
pour sortir de boucles comme celle-ci:Pour aller encore plus loin, vous pouvez écrire des analyseurs de jetons pour
{% continue X %}
et{% break X %}
(où X est un entier> = 1) pour sortir / continuer plusieurs boucles comme en PHP .la source
squirrelphp/twig-php-syntax
bibliothèque fournit{% break %}
,{% break n %}
et des{% continue %}
jetons.De @NHG comment - fonctionne parfaitement
la source
J'ai trouvé une bonne solution pour continuer (j'adore l'exemple de pause ci-dessus). Ici, je ne veux pas lister "agence". En PHP, je "continuerais" mais en brindille, j'ai trouvé une alternative:
OU je l'ignore simplement s'il ne répond pas à mes critères:
la source