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

for循环开始标记中的Twig If语句,twig,php-7.2,symfony5,Twig,Php 7.2,Symfony5,我有一段代码,用来计算从对象检索到的for循环中的项目。 这段代码运行在带有PHP7.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 }} 它给出了以下错误: 当我使用PHP7.1

我有一段代码,用来计算从对象检索到的for循环中的项目。 这段代码运行在带有PHP7.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 }}
它给出了以下错误:

当我使用PHP7.1.3和twig bundle 4.2在Symfony 4.2上运行相同的代码时,一切正常

小枝束代码语法是否有任何未正确使用的更改或缺少的内容?

尝试以下操作:

{% set sent_mails = 0 %}

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

{{ sent_mails }}

如果不推荐在
for
中使用

在第1行的“main.twig”中为“tag”使用“if”条件是错误的 自Twig 2.10.0以来已弃用,请使用“过滤器”过滤器或“如果” 改为“for”主体内的状态(如果您的状态取决于 循环内更新的变量)


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

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

{{ sent_mails }}

是的,这会起作用,但这是一种干净有效的方法吗?什么是无效的?你有一个循环和一个条件来知道你发送了多少邮件,出了什么问题?这里还有一个与您类似的问题:只需将IF放在自己的指令“symfony/twig bundle”中,即composer.json中的“5.0.*”,这就是我说twig bundle 5.0的原因