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
相关产品推荐
相关产品推荐

