【问题标题】:Twig: Append to array inside array/objectTwig:附加到数组/对象内的数组
【发布时间】:2015-12-11 17:35:47
【问题描述】:

我有一个对象,在 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']) %}

有什么想法吗?

【问题讨论】:

标签: arrays symfony drupal twig drupal-8


【解决方案1】:

使用 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

【讨论】:

  • 这看起来有点像我可能的答案的内联版本:stackoverflow.com/a/34229624/224707。很遗憾 Twig 不喜欢你设置对象属性。
  • 我理解你的意思,在小型项目中这可能非常有用。但是在 Twig 中更改对象值没有意义:作为模板引擎,它应该只渲染事物,而不更改应用程序状态。
【解决方案2】:

这看起来可行:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多