在 for 循环开始标记中的 Twig If 语句

Twig If statement within for loop opening tag

我有这段代码应该计算从对象检索的 for 循环中的项目。 此代码 运行ning 在带有 php 7.2.5 和 twig-bundle 5.0

的 symfony 5.0 项目上
{% set sent_mails = 0 %}

 {% for email in emails if email.status == 1 %}
    {% set sent_mails = (sent_mails + 1) %}
 {% endfor %}

{{ sent_mails }}

并出现以下错误:

当我 运行 使用 php 7.1.3 和 twig-bundle 4.2 在 Symfony 4.2 上使用相同的代码时,一切正常。

我没有正确使用的 twig-bundle 代码语法是否有任何更改或者我遗漏了什么?

试试这个:

{% set sent_mails = 0 %}

{% for email in emails %}
    {% if email.status == 1 %}
        {% set sent_mails = (sent_mails + 1) %}
    {% endif %}
{% endfor %}

{{ sent_mails }}

不推荐在 for 中使用 if

Using an "if" condition on "for" tag in "main.twig" at line 1 is deprecated since Twig 2.10.0, use a "filter" filter or an "if" condition inside the "for" body instead (if your condition depends on a variable updated inside the loop).

source

我找到了一种通过使用 Twitter 用户推荐的过滤器来实现此目的的方法:@dbrumann

{% set sent_mails = 0 %}
   {% for email in emails|filter(email => email.status == 1) %}
    {% set sent_mails = (sent_mails + 1) %}
   {% endfor %}

{{ sent_mails }}