Drupal的Twig模板访问数组深层值返回null如何解决
问题原因
- 核心问题1:
values是Drupal\node\Entity\Node类的受保护(protected)属性,Twig默认不允许直接访问类的非公开属性,不管你用对象点语法还是数组方括号语法都无法读取该属性,自然返回null。 - 核心问题2:哪怕你能访问到values属性,取值路径也缺了语言层级,从你贴的结构看
values.body下还有x-default的语言维度,你直接写body[0]也会取不到对应值。
正确解决方法
Drupal的实体类在Twig中做了字段访问封装,不需要直接触碰内部的protected属性,直接通过字段名即可读取对应值:
{% for item in content %} {# 先判断当前item的字段名,避免非字段项报错 #} {% if item['#field_name'] is defined and item['#field_name'] == 'body' %} {# 读取body字段正文值,Drupal会自动适配当前页面语言 #} {{ item['#object'].body.value }} {# 读取body字段摘要值 #} {{ item['#object'].body.summary }} {% endif %} {% endfor %}
如果你不需要遍历content,只是单独取body字段的值,更简单的写法是直接从content变量读取:
{{ content.body.0['#text'] }}
补充说明
你直接打印{{ item }}能输出完整内容,是因为Twig打印对象时会自动调用对象的__toString()方法,输出的是预渲染好的HTML内容,不等于item的所有内部属性都对外可访问。
不建议通过安装Twig扩展或自定义方法强行读取protected属性,不符合Drupal开发规范,后续版本升级很容易出现兼容问题。
内容的提问来源于stack exchange,提问作者nublet
相关产品推荐
相关产品推荐

