Drupal 7自定义模块遇require_once致命错误,请求技术支持
解决Drupal 7中require_once加载失败的致命错误
嘿,我一眼就看出问题出在哪了——你提供的audit_menu()函数里,'file'参数的文件名被截断成了'audi...',Drupal找不到对应的文件,所以才抛出了require_once(): Failed opening required的致命错误。结合你说的表单定义文件是audit.pages.inc,咱们一步步来修复:
第一步:补全file参数并验证路径
你的菜单回调需要正确指向包含audit_form函数的audit.pages.inc文件,修正后的代码应该是这样的:
function audit_menu() { $items = array(); $items['audit'] = array( 'title' => 'Audit', 'type' => MENU_CALLBACK, 'access arguments' => array('administer audit'), 'page callback' => 'audit_form', 'page arguments' => array('audit_form'), // 补全完整的文件名,指向你的表单定义文件 'file' => 'audit.pages.inc', // 如果audit子模块在audit_pdf的子目录下(比如audit_pdf/audit/),需要加上file path参数 // 'file path' => drupal_get_path('module', 'audit_pdf') . '/audit', ); return $items; }
这里要注意两个关键点:
- 确保
'file'的值是完整的'audit.pages.inc',不能有截断。 - 如果你的
audit子模块是放在audit_pdf模块目录的子文件夹里(比如sites/all/modules/audit_pdf/audit/),必须取消注释'file path'这一行,告诉Drupal去哪里找这个inc文件。drupal_get_path('module', 'audit_pdf')会自动获取主模块的绝对路径,拼接子目录后就能准确定位文件。
第二步:验证文件和权限
- 确认
audit_form函数确实存在于audit.pages.inc文件中,没有拼写错误。 - 检查
audit.pages.inc的文件权限,确保Drupal的web服务器用户(比如www-data)有读取这个文件的权限,避免因权限不足导致加载失败。
第三步:清除Drupal缓存
这一步绝对不能忘!Drupal会缓存菜单路由信息,哪怕你修正了代码,不清除缓存的话,旧的错误配置还会生效。你可以:
- 登录Drupal后台,进入配置 > 性能页面,点击“清除所有缓存”按钮。
- 如果安装了Drush工具,直接在命令行运行:
drush cc menu(只清除菜单缓存,速度更快)。
做完这些,你的表单应该就能正常加载了,以后写Drupal菜单回调的时候,一定要注意file和file path参数的准确性,这是新手很容易踩的坑~
内容的提问来源于stack exchange,提问作者Valentin
相关产品推荐
相关产品推荐

