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 %}