模块类找不到时需开启YII_DEBUG和PHP错误显示;Module not found需检查配置键名、路径、命名空间及autoload;Invalid Route要确认模块启用和默认路由;View not Found应核对模块ID大小写与视图路径。

模块类找不到时,Class not found 错误不显示堆栈怎么办
默认生产环境会静默吞掉异常,只返回空白 500 页面。必须强制开启错误显示才能看到真实报错。
打开 web/index.php,确认以下三行存在且未被注释:
defined('YII_DEBUG') or define('YII_DEBUG', true);defined('YII_ENV') or define('YII_ENV', 'dev');error_reporting(E_ALL); ini_set('display_errors', '1');
注意:YII_DEBUG 为 false 时,ErrorHandler 会拦截所有异常并转白屏;仅设 true 还不够,PHP 层级的错误输出也得手动打开。
Module not found 或 Invalid Configuration – Unknown module 怎么定位
这类报错不是类加载失败,而是模块注册阶段出问题——配置写错、路径不对、或模块类本身没被自动加载。
- 检查
config/web.php中'modules'数组里的键名是否和模块类名一致(如'admin' => ['class' => 'app\modules\admin\Module']) - 确认模块类文件路径为
@app/modules/admin/Module.php,且命名空间是app\modules\admin - 若模块类用了自定义命名空间(比如
common\modules\api\Module),需确保composer.json的autoload区块已声明该 PSR-4 路径 - 运行
composer dump-autoload强制刷新自动加载映射,避免缓存导致类存在却找不到
模块内控制器访问报 Invalid Route 却无提示
路由解析失败时,Yii2 默认不抛异常,而是走 NotFoundHttpException,最终被 errorHandler 拦截。你看到的可能是 404 页面,但没堆栈信息。
- 在
config/web.php的'errorHandler'配置中加上'maxSourceLines' => 20和'maxTraceString' => 2048,提升调试信息密度 - 临时在
SiteController::actionError()里加var_dump($exception->getMessage(), $exception->getTraceAsString()); die;确认是否真进来了 - 检查模块是否启用:访问
/admin报 404,但/admin/default/index可访问,说明模块注册了,但没配默认路由;需在模块类的init()里设置$this->defaultRoute = 'default';
模块视图渲染时报 View not Found 却没提示路径
Yii2 查找视图时默认不报详细路径,只说“not found”,容易卡在路径拼接环节。
- 视图实际查找路径是:
@app/modules/{moduleID}/views/{controller}/{action}.php,其中{moduleID}必须和config/web.php里'modules'的键名完全一致(区分大小写) - 模块 ID 是
userCenter,但目录是usercenter,就会失败;同理,控制器 ID 是profile,但视图目录写成Profile也不行 - 可在控制器中临时加
echo $this->getViewPath();看 Yii2 实际认定的路径,比猜快得多 - 别依赖
$this->render('@app/modules/xxx/views/...')绝对路径写法——它绕过模块视图查找机制,一旦模块迁移就断
模块加载问题最常卡在“以为配置对了,其实路径/命名/大小写/注册顺序有一处差一毫”。调试时优先看 web/index.php 是否真启用了调试模式,再用 echo 打点确认路径和变量值,比翻文档更快。











