Twig 循环变量的细枝提取

Twig 循环变量的细枝提取,twig,symfony,Twig,Symfony,假设我有一组物品 $collection = array( 'item1' => array( 'post' => $post, 'category' => $category, // ... ), 'item2' => array(...) ); 我有一个模板: {% for item in collection %} Now I can use item data

假设我有一组物品

$collection = array(
      'item1' => array(
            'post' => $post,
            'category' => $category,
            // ...
  ),
  'item2' => array(...)
);
我有一个模板:

{% for item in collection %}

    Now I can use item data
       - {{ item.post.title }}
       - {{ item.category.id }}
       - {{ item.var1 }}
       - {{ item.var2 }}
       - and another 20 vars

    I want to extract those vars into more global FOR context, and use them as:

        {{ post.title }}
        {{ category.id }}
        {{ var1 }}
         ... etc

{% endfor %}
这可能吗

我想把循环定义为一个模板块,然后用Twig_template::renderBlock()迭代它。但是文件上说renderBlock仅供“内部”使用:)所以不确定

编辑:

我还有一个想法:

{% for item in collection %}

    {% do extract(item) %}
    // extract() would work similar to extract function from php

{% endfor %}
然而,上下文似乎是通过值传递给细枝函数的,所以这不起作用

最后,我可以编写一个令牌解析器并执行以下操作:

{% for item in collection %}

    {% extract item %}
    // would probably get direct access to the context, but haven't tried it

{% endfor %}
但这是一项相当艰巨的工作。。我只是希望twig已经可以在本地实现这一点:)

您可以使用宏:


如果确实要在全局上下文中分配变量:

{% for item in collection %}
    {% for var, value in item %}
        {% set  _context[var] = value %}
    {% endfor %}

    {{ post.title }}
    {{ category.id }}
    {{ var1 }}
     ... etc
{% endfor %}

这是如何解决问题的?我仍然必须通过
{{item.xxxx}}
访问每个项目,在这里它的作用域是宏参数。因此,如果调用{{macro.render(foo)}},它将呈现foo组件。
{% for item in collection %}
    {% for var, value in item %}
        {% set  _context[var] = value %}
    {% endfor %}

    {{ post.title }}
    {{ category.id }}
    {{ var1 }}
     ... etc
{% endfor %}