You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal entity metadata wrapper无bundle属性且Title属性不存在报错排查

解决Drupal Entity Metadata Wrapper提示“Title属性不存在”的问题

我之前在Drupal 7项目里碰到过几乎一模一样的问题,结合你提到的“无bundle属性”的线索,大概率是下面几个原因导致的,咱们一步步排查:

1. 传入的节点无效或缺失核心属性

首先要确认你传入的$nid对应的节点是真实存在且完整的:

  • 如果$nid是数字ID,先手动加载节点检查:$node = node_load($nid);,如果返回FALSE,说明节点不存在,wrapper自然找不到任何属性。
  • 如果$nid是节点对象,检查它是否缺失type(bundle)属性——Entity Metadata Wrapper依赖bundle信息来加载对应内容类型的字段元数据,要是$node->type为空,wrapper根本不知道该识别哪些字段,包括默认的title。

你可以先加一段验证代码:

// 统一处理ID或对象的情况
$node = is_numeric($nid) ? node_load($nid) : $nid;

// 验证节点有效性
if (!$node || empty($node->type) || !isset($node->title)) {
  drupal_set_message(t('无效的节点数据,请检查节点ID或对象完整性'), 'error');
  return;
}

// 再创建wrapper
$wrapper = entity_metadata_wrapper('node', $node);

2. Entity模块元数据缓存过期

7.x-1.8版本的Entity模块缓存机制偶尔会出问题,尤其是当你修改过内容类型字段、新增/删除bundle之后,元数据缓存没有及时更新,导致wrapper识别不到默认的title字段。

解决办法很简单:

  • 后台手动清空所有缓存(配置 > 性能 > 清空所有缓存);
  • 或者用Drush命令:drush cc all;
  • 极端情况下可以手动刷新entity元数据缓存:entity_info_cache_clear();

3. 内容类型意外移除了Title字段

虽然Drupal 7默认所有节点类型都自带title字段,但不排除通过自定义代码(比如hook_node_info())或者第三方模块刻意隐藏/移除了该字段的情况。

你可以用代码检查对应内容类型的title字段是否存在:

$title_instance = field_info_instance('node', 'title', $node->type);
if (!$title_instance) {
  drupal_set_message(t('当前内容类型未启用Title字段'), 'error');
}

4. Entity模块版本bug

7.x-1.8确实存在一些已知的小bug,比如在特定场景下无法正确识别核心默认字段。如果以上步骤都排查无果,可以尝试升级Entity模块到7.x-1.9或更高的稳定版本(升级前记得备份站点和数据库)。

另外,你也可以用getPropertyInfo()方法查看wrapper能识别的所有属性,确认title是否在列表里:

$wrapper = entity_metadata_wrapper('node', $node);
// 如果安装了Devel模块,用dpm打印属性列表
dpm($wrapper->getPropertyInfo());

内容的提问来源于stack exchange,提问作者PimD1988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:22:39