在 Drupal 8 中返回深度嵌套的字段变量值

Returning deeply nested field variable value in Drupal 8

过去几个小时我一直在尝试解决这个问题,但还没有接近解决方案。我正在尝试 return D8 段落模板中 link 目标属性的字符串值:

当我使用机器名称 (field_link_cta) 在字段上执行 var 转储时,执行以下操作

{{ dump(content.field_link_cta['#items'].getValue()) }} 我得到结果 return 值:

我可以将变量遍历到 return 标题 ok,但是由于某些原因无法访问 link 属性?

{{ content.field_link_cta[0]['#title'] }} - 有效,returns 值。

{{ content.field_link_cta[0]['#options']['#attributes']['#target'] }} - 不起作用,return没有价值。

我在这里错过了什么?鉴于我已经遍历了变量转储中列出的变量,'target' 属性字符串不应该像标题一样被 return 编辑吗?有没有更好的方法来检查这个变量的上下文?

任何指点将不胜感激。

感谢您的帮助!

马克.

有两种选择:

选项 1(更好):

{{ content.field_link_cta.0['#options']['attributes']['target'] }}

选项 2:

{{ content.field_link_cta['#items'].getValue().0['options']['attributes']['target']) }}

解释:

您做了 {{ dump(content.field_link_cta['#items'].getValue()) }},您可以看到选项属性和目标数组键没有 #。但是,除了转储之外,您从未使用过此选项(选项 2)。

最好做 {{ dump(content.field_link_cta[0]) }} 你会看到不同的转储,比如:

array (size=4)
  '#type' => string 'link' (length=4)
  '#title' => string 'link/text' (length=9)
  '#options' => 
    array (size=1)
      'attributes' => 
        array (size=3)
          'target' => string '_blank' (length=6)
          'rel' => string 'rel' (length=3)
          'class' => 
            array (size=1)
              ...

这里很明显 title 数组键有 #,这就是 {{ content.field_link_cta[0]['#title'] }} 有效的原因。

属性和目标数组键没有 #,这就是 {{ content.field_link_cta[0]['#options']['#attributes']['#target'] }} 不起作用的原因,正确的代码将显示在 "Option 1" 下。