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

Drupal 7后台实体ID含逗号致编辑/删除链接404问题求助

解决方案:Drupal 7实体ID带逗号导致404错误

这问题我之前帮同行排查过类似的,核心原因是数字格式化时意外添加了千位分隔符——当实体ID大于等于1000时,代码把ID转成了带逗号的字符串(比如把4495变成了4,495),Drupal的路由系统识别不了这种带特殊字符的ID,自然就返回404了。下面是具体的排查和修复步骤:

1. 定位问题代码的位置

首先得找到生成编辑/删除链接的地方:

  • 如果是自定义实体的列表页面,去查看对应模块的hook_menu()回调函数,或者实体列表构建的代码(比如yourmodule_player_team_list()这类函数)。
  • 如果是用Views生成的实体列表,进入Views的编辑界面,找到实体ID字段的配置项。

2. 修复链接生成逻辑

情况1:自定义代码生成链接

检查代码里有没有对实体ID使用number_format()或者类似的格式化函数。比如你可能看到类似这样的错误代码:

// 错误示例:用了number_format格式化ID,导致带逗号
$links['edit'] = array(
  'title' => t('Edit'),
  'href' => 'admin/structure/entity-type/player_team/superleague/' . number_format($entity->id) . '/edit',
  'query' => array('destination' => current_path()),
);

把格式化的部分去掉,直接使用原始的实体ID即可:

// 正确写法:保持ID的原始数值格式
$links['edit'] = array(
  'title' => t('Edit'),
  'href' => 'admin/structure/entity-type/player_team/superleague/' . $entity->id . '/edit',
  'query' => array('destination' => current_path()),
);

情况2:Views生成的列表

进入Views编辑页面,找到实体ID字段的设置:

  • 点击字段的“配置”按钮,在“格式化”选项里,找到“数字格式化”相关的设置,把“千位分隔符”的勾选去掉。
  • 确保字段在用作链接路径参数时,使用的是原始的ID值,而不是格式化后的字符串。

3. 必做步骤:清除Drupal缓存

修改代码或Views配置后,一定要去Drupal后台的admin/config/development/performance页面,点击“清除所有缓存”,确保新的链接生成逻辑生效。

4. 后续预防建议

  • 实体ID是路由的核心参数,永远不要对其做格式化处理(比如加千分位、转成带前缀的字符串等),保持原始的整数或无格式字符串类型。
  • 如果需要在页面显示带格式的ID(比如美观的千分位),只在显示用的字段里做格式化,绝对不要用到链接的路径参数中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:48:03