3 回答

TA贡献1887条经验 获得超5个赞
您可以使用以下代码段实现此目的:
主枝
{% import 'macro.twig' as macro %}
{{ macro.get_attribute(foo, 'bar.foobar') }}
大树枝
{% macro get_attribute(object, attributes) %}
{% apply spaceless %}
{% set attributes = attributes|split('.') %}
{% set value = object %}
{% for attribute in attributes %}
{% set value = attribute(value, attribute|trim) is defined ? attribute(value, attribute|trim) : null %}
{% endfor %}
{{ value }}
{% endapply %}
{% endmacro %}
演示
但是,请注意,如果您尝试为此使用宏并将“输出”存储在变量中,请记住,宏将返回Twig_Markup. 这意味着您以后不能使用该值。
一个例子:
数据
foo:
bar:
foobar: 'Lorem Lipsum'
主枝
{% set bar = macro.get_attribute(foo, 'bar') %}
{{ bar.foobar }} {# <--- error cause `foobar` is not a member of `Twig_Markup` #}
bar实际上的实际值甚至不是一个对象或数组,而只是一个字符串,在这个例子中,Array作为内容
{% set bar = macro.get_attribute(foo, 'bar') %}
{{ bar }} {# output: Array #}
- 3 回答
- 0 关注
- 169 浏览
添加回答
举报