我(最终)将我的网站从Drupal7切换到Symfony3。
我正在努力将我的布局迁移到.twig。
我对循环和键值数组有疑问。
我配置了一个k / v数组
{% set test = {
sec1: {
title: "title 1",
content: "content 1"
},
sec2: {
title: "title 2",
content: "content 2"
},
}
%}
我可以引用其他标记中的任何特定数组元素。例如,这可以按预期工作
<ul>
<li>
<h1>{{ test.sec1.title }}</h1>
<div>
<p>{{ test.sec1.content }}</p>
</div>
</li>
</ul>
现在我想在n的计数上循环/重复该块。但试着这个,
<ul>
{% for i in 1..5 %}
<li>
<h1>{{ test.sec{{ i }}.title }}</h1>
<div>
<p>{{ test.sec{{ i }}.content }}</p>
</div>
</li>
{% endfor %}
</ul>
触发错误
Unexpected token "punctuation" of value "{" ("end of print statement" expected) in default/index.html.twig at line 67.
500 Internal Server Error - Twig_Error_Syntax
我一直在研究这些
的变体http://twig.sensiolabs.org/doc/tags/for.html#iterating-over-keys
但是还没有任何工作要做。
将此列表循环到键值数组中的secN的正确方法是什么?
答案 0 :(得分:1)
您的脚本不起作用的原因是您无法组成这样的对象属性访问器。
您可能需要的是iterating over a subset:
{% for sec in test|slice(0, 5) %} {{ sec.title }} {% endfor %}
或者,如果您确实需要访问密钥:iteration over key and value:
{% for key, sec in test %} {{ sec.title }} {{key}} {% endfor %}
如果您在访问密钥时需要切片,可以将后者与支票loop variables结合使用:
{% for key, sec in test %} {% if loop.index0 < 5 %} {{ sec.title }} {{key}} {% endif %} {% endfor %}
答案 1 :(得分:0)
{% for key, item in content.field_invoice_no if key|first != '#' %}
<tr>
<td>{{ item }}</td>
<td> {{ content.field_invoice_date[key] }} </td>
</tr>
{% endfor %}
在 Twig 中迭代键值数组
以下参考实体代码
{% for key, item1 in node.field_quotation.entity.field_product %}
<tr>
<td>{{ loop.index }}</td>
<td>{{ item1.entity.body.value |raw }}</td>
<td> {{ item1.entity.field_product_unit_required.value }}</td>
<td>{{ item1.entity.field_hsn_code.value }}</td>
<td>{{item1.entity.field_pro.number|number_format(2, '.', ',')}}</td>
{% endfor %}
</tr>