Twig:如何将对象添加到多级对象中

时间:2017-12-28 11:50:28

标签: twig

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

1 个答案:

答案 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中做了很多这种变量操作,可能表明某些代码可能更好地放在控制器或模型中或其他任何东西。