根本原因是未执行php init、Web服务器根目录配置错误或PHP扩展缺失;需运行init生成入口和配置,将DOCUMENT_ROOT设为frontend/web或backend/web,并确保mbstring、openssl等扩展已启用。

安装 Yii2 高级版后出现 Class 'Yii' not found,根本原因不是缺文件,而是环境没走通——没执行 init、没配好 Web 服务器入口、或自动加载机制被跳过。下面直击关键环节,逐项排查解决。
必须运行 php init 初始化
高级版的配置是“按需生成”的,不执行 init 就没有有效的 frontend/backend 入口文件、没有环境配置软链、vendor/autoload.php 也不会被正确引入。
- 进入项目根目录(如
advanced/),执行:php init - 选择 Development 模式(开发环境)或 Production(上线前再切)
- init 会生成
environments/下的配置,并自动创建软链接到frontend/web/index.php和backend/web/index.php - 若跳过这步,直接访问
frontend/web/index.php,必然报Class 'Yii' not found
Web 服务器 DOCUMENT_ROOT 必须指向子目录
高级版是多入口结构,不能把整个 advanced/ 当网站根目录,否则 PHP 找不到 vendor/autoload.php,也加载不了 Yii 类。
- Apache/Nginx 的根目录应设为:
advanced/frontend/web/(前台)或advanced/backend/web/(后台) - 确认
web/index.php文件顶部有:require(__DIR__ . '/../../vendor/autoload.php');
和require(__DIR__ . '/../../common/config/bootstrap.php'); - 如果用本地 PHP 内置服务器测试,命令应为:
php -S localhost:8000 -t frontend/web frontend/web/router.php
检查 PHP 环境与扩展是否就绪
即使 init 跑了、路径对了,PHP 缺关键扩展也会导致 autoload 失败,最终表现为类找不到。
- 运行
php -v确认版本在 7.4–8.1 区间(Yii2 不兼容 PHP 8.2+ 的只读类等变更) - 运行
php -m | grep -E "(mbstring|openssl|pdo|json)",确保以下扩展已启用:
•mbstring
•openssl
•pdo(及对应数据库驱动,如pdo_mysql)
•json - 若用 XAMPP/MAMP/WAMP,请确认终端中
php -v和 Web 服务器调用的是同一套 PHP
代码中引用 Yii 的写法要规范
这个错误有时也出现在控制器或视图里写错命名空间,尤其混用大小写或漏反斜杠。
- 全局使用
\Yii(注意开头的反斜杠),例如:$id = \Yii::$app->request->get('id'); - 不要写成
Yii或YII(大小写敏感)或app\controllers\Yii(错误命名空间) - 在命名空间内(如
frontend\controllers),仍需用\Yii显式调用全局类,不能省略反斜杠


















