将Twig变量从数组传递给include

时间:2016-07-07 14:16:18

标签: twig

我有一个数组,我正在迭代以将不同类型的组件引入我的页面:

array(
    'content'=> array(
        'componentA'=>array(
            'val'=>'1',
            'title'=>'sample title'
        ),
        'componentB'
    )
)

我正在尝试将变量从数组传递到包含的模板,但我不确定如何将连接产生的字符串转换为包含可以理解为变量数组的字符串。当我从第一个@components include中排除“with”时,它打印出我在可迭代组件中设置的所有默认值,就像我期望的那样,但是当我保持with属性时仍然给我一个白色屏幕。我显示var本身,它返回此字符串: (注意,我也尝试在{{k}}周围加上引号无效)

{ val:'1',title:'sample title' }

如何将变量从我的数组传递给我的组件?

{% for key,item in content %}
    {% if item is iterable %}

        {% set var = [] %}
        {% for k,v in item %}
            {% set temp %}{% if loop.first %} { {% endif %}{{ k }}:'{{ v }}'{% if loop.last %} } {% endif %}{% endset %}
            {% set var = var|merge([ temp ]) %}
        {% endfor %}
        {% set var = var|join(',') %}

        {{ include ("@components/" ~ key ~ ".tmpl",var) }}
    {% else %}
        {{ include ("@components/" ~ item ~ ".tmpl") }}
    {% endif %}
{% endfor %}

1 个答案:

答案 0 :(得分:1)

您的include语句不正确。您使用的是{{ include ... }}{% include ... %}

如果您只想提供数组中的数据(而不是循环数据),则以下代码段应该有效:

{% for key,item in content %}
    {% if item is iterable %}
        {% include ("@components/" ~ key ~ ".tmpl") with item %}
    {% else %}
        {% include ("@components/" ~ item ~ ".tmpl") %}
    {% endif %}
{% endfor %}

然后,您可以在组件模板中使用{{ val }}{{ title }}

如果要包含循环数据,可以使用:

{% for key,item in content %}
    {% if item is iterable %}
        {% include ("@components/" ~ key ~ ".tmpl") with {item: item, loop: loop} %}
    {% else %}
        {% include ("@components/" ~ item ~ ".tmpl") %}
    {% endif %}
{% endfor %}

然后,您可以在组件模板中使用{{ item.val }}{{ item.title }}{{ loop.index }}