在twig模板中,我有一个具有多个级别的对象 我需要将一个新对象添加到多个对象中作为子对象
{%
set data = {
'first': 'First',
'data': {
'val_1': 'val_1'
}
}
%}
这应该添加到数据val_2: val_2
预期结果:
{%
set data = {
'first': 'First',
'data': {
'val_1': 'val_1',
'val_2': 'val_2'
}
}
%}
答案 0 :(得分:0)
首先,在Twig术语中,它不是对象或键值数组,而是哈希(see Twig's documentation of literals)。
您无法向哈希添加项目,例如做{% set data.second = 'Second' %}
。相反,您需要使用merge filter:
{%
set data = data|merge({
second: 'Second',
})
%}
{{ dump(data) }}
{# Prints this:
array(3) {
["first"]=>
string(5) "First"
["data"]=>
array(1) {
["val_1"]=>
string(5) "val_1"
}
["second"]=>
string(6) "Second"
}
#}
因此,要将项添加到散列内的散列中,您需要使用合并过滤器两次:
{%
set data = data|merge({
data: data.data|merge({
val_2: 'val_2',
}),
})
%}
{# Prints this:
array(3) {
["first"]=>
string(5) "First"
["data"]=>
array(1) {
["val_1"]=>
string(5) "val_1"
["val_2"]=>
string(5) "val_2"
}
["second"]=>
string(6) "Second"
}
#}
如果你在Twig中做了很多这种变量操作,可能表明某些代码可能更好地放在控制器或模型中或其他任何东西。