Drupal 9.5.2模块开发:控制器类不存在报错求助
Drupal模块开发:控制器类不存在错误排查
报错信息
InvalidArgumentException: Class "\Drupal\new_module\Controller\NewModuleController" does not exist. in Drupal\Core\DependencyInjection\ClassResolver->getInstanceFromDefinition() (line 24 of core\lib\Drupal\Core\DependencyInjection\ClassResolver.php).
模块文件详情
new_module.info.yml
name: New Module description: 我的第一个自定义模块 package: 新模块 type: module core: 8.x core_version_requirement: ^8 || ^9
new_module.routing.yml
new_module.content: path: '/admin/config/new-mogule-first' defaults: _title: 'New Module' _controller: '\Drupal\new_module\Controller\NewModuleController::content' requirements: _permission: 'access content'
src/Controller/NewModuleController.php
<?php namespace Drupal\new_module\Controller; use Drupal\Core\Controller\ControllerBase; class NewModuleController extends ControllerBase { public function content(){ return array( '#type'=> 'markup', '#markup' => $this->t('你好,测试'), ); } } ?>
Drush状态信息
Drupal版本 : 9.5.2 站点URI : http://default 数据库驱动 : mysql 数据库主机 : localhost 数据库端口 : 3306 数据库用户名 : root 数据库名 : drupasl_new_module 数据库连接状态 : 已连接 Drupal引导状态 : 成功 默认主题 : olivero 后台管理主题 : claro PHP二进制路径 : C:/xampp/php/php.exe PHP配置文件路径 : C:/xampp/php/php.ini PHP操作系统 : WINNT PHP版本 : 8.1.12 Drush脚本路径 : C:/xampp/htdocs/drupal/new_module/vendor/bin/drush Drush版本 : 11.4.0 Drush临时目录 : C:/Users/54113/AppData/Local/Temp Drush配置文件 : C:/xampp/htdocs/drupal/new_module/vendor/drush/drush/drush.yml 安装配置文件 : standard Drupal根目录 : C:\xampp\htdocs\drupal\new_module/web 站点路径 : sites/default 公共文件目录 : sites/default/files 临时文件目录 : C:\xampp\tmp
补充说明:使用Drush生成测试模块时,也出现相同错误。
问题排查与解决方案
1. 修正路由文件拼写错误
路由文件中path字段的new-mogule-first存在拼写错误,应为new-module-first,虽不是控制器类找不到的直接原因,但会导致路径无法访问,建议修正。
2. 验证控制器文件路径与命名空间
- 确认控制器文件路径为
web/modules/custom/new_module/src/Controller/NewModuleController.php,路径层级和文件名必须完全匹配命名空间Drupal\new_module\Controller。 - 检查文件名大小写:Windows系统对文件名大小写不敏感,但Drupal自动加载机制依赖严格规范,确保文件名
NewModuleController.php与类名NewModuleController完全一致(包括大小写)。
3. 清除缓存
Drupal会缓存类映射,即使文件存在,缓存未更新也会导致类找不到错误。执行Drush命令清除缓存:
drush cr
若无法使用Drush,可通过后台管理菜单(配置 -> 性能 -> 清除所有缓存)操作。
4. 确认模块已启用
确保new_module模块已在后台启用,未启用的模块其类不会被加载。可通过Drush命令检查并启用:
drush pm:enable new_module -y
5. 更新Composer自动加载映射
Drupal依赖Composer自动加载机制,若模块为手动创建,执行以下命令更新自动加载映射:
composer dump-autoload
6. 检查文件权限
确保Web服务器对web/modules/custom/new_module/src/目录及文件有读取权限,Windows下需确认文件未被锁定或权限设置正确。
内容的提问来源于stack exchange,提问作者Garik St
相关产品推荐
相关产品推荐

