Twig:追加到数组/对象

时间:2015-12-11 17:35:47

标签: arrays symfony drupal twig drupal-8

我有一个对象,在JSON中,看起来像这样:

{
  'class': ['nav-link', 'dropdown-toggle'],
  'data-toggle': ['dropdown']
}

然后我需要能够将另一个类附加到对象内的类数组中。

这段代码似乎不起作用;它只是覆盖了类数组。

{% set link_attribs = { 'class' : ['nav-link', 'dropdown-toggle'], 'data-toggle':'dropdown'} %}
{% set link_attribs = link_attribs|merge({'class': ['highlighted']}) %}

我真的想做这样的事情,但它只会引发标点错误。

{% set link_attribs.class = link_attribs.class|merge(['highlighted']) %}

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

使用Twig,您无法直接设置对象属性,因此" set (...).class"永远不会工作。但相反,您可以创建一个将继承defaultoptions值的新变量(就像在大多数JavaScript代码中一样)。

例如:

{%
  set options = link_attribs | merge({
      'class': link_attribs.class | merge(['highlighted']) 
  })
%}

{% for class in options.class %}
  {{ class }}
{% endfor %}

将显示:

nav-link
dropdown-toggle
highlighted

请参阅fiddle

答案 1 :(得分:1)

这看起来很有效:

{% set c = link_attribs.class %}
{% set c = c|merge(['highlighted']) %}
{% set link_attribs = link_attribs|merge({'class': c}) %}

不确定它是否是最优雅的方式。