Tento usar um loop simples, no meu código real esse loop é mais complexo e preciso fazer break
essa iteração como:
{% for post in posts %}
{% if post.id == 10 %}
{# break #}
{% endif %}
<h2>{{ post.heading }}</h2>
{% endfor %}
Como posso usar o comportamento de break
ou continue
de estruturas de controle de PHP no Twig?
first
filtro twig: twig.sensiolabs.org/doc/filters/first.htmlset break = true
será executada a menos que você coloque em umaelse
instrução. Consulte twigfiddle.com/euio5wset break = true
no final . Mas sim, depende do seu código, então obrigado por mencioná-lo para esclarecerDos docs TWIG docs :
Mas ainda:
Exemplo 1 (para listas enormes você pode filtrar mensagens usando fatia ,
slice(start, length)
):Exemplo 2:
Você pode até usar os próprios filtros TWIG para condições mais complexas, como:
fonte
{% for post in posts|slice(0,10) %}
Unlike in PHP, it's not possible to break or continue in a loop.
quando li os documentos. Mas eu achobreak
econtinue
é um bom recurso, que precisaria adicionarfor
deve ser quebrável após o primeiro acerto. A resposta de @VictorBocharsky está certa{% for post in posts|slice(0,10) %}
para listas enormes. Veja meu primeiro comentário. Eu também atualizei minha resposta.Uma forma de poder usar
{% break %}
ou{% continue %}
é escreverTokenParser
s para eles.Fiz isso para o
{% break %}
token no código abaixo. Você pode, sem muitas modificações, fazer a mesma coisa para o{% continue %}
.AppBundle \ Twig \ AppExtension.php :
AppBundle \ Twig \ BreakToken.php :
AppBundle \ Twig \ BreakNode.php :
Em seguida, você pode simplesmente usar
{% break %}
para sair de loops como este:Para ir ainda mais longe, você pode escrever analisadores de token para
{% continue X %}
e{% break X %}
(onde X é um inteiro> = 1) para obter / continuar vários loops como no PHP .fonte
squirrelphp/twig-php-syntax
biblioteca oferece{% break %}
,{% break n %}
e{% continue %}
tokens.Do comentário @NHG - funciona perfeitamente
fonte
Eu encontrei uma boa solução para continuar (adorei o exemplo acima). Aqui eu não quero listar "agência". No PHP, eu "continuaria", mas no twig, encontrei uma alternativa:
OU eu simplesmente pulo se não atender aos meus critérios:
fonte