必须用 composer create-project 安装 yii2,因 yiisoft/yii2 仅为无入口的核心库;新项目需加 --prefer-dist --no-scripts 并指定 2.0.48 版本,装完立即执行 php init,web 服务器 root 必须指向 web/ 目录。

composer create-project 是唯一能装出可运行 Yii2 的方式,其他方法大概率白忙活。
为什么不能用 composer require yiisoft/yii2?
因为 yiisoft/yii2 本身只是核心库,没有 web/index.php、没有 config/ 目录、没有自动别名映射——它根本不是个“应用”,只是个“零件”。你硬 require 进来,得到的是一堆报 Class 'Yii' not found 的空目录。
- 常见错误现象:
php -S localhost:8000启动后直接 404,或访问首页报Invalid Configuration – yii\base\InvalidConfigException - 使用场景:仅适合已有非 Yii 项目,想零星用
yii\helpers\ArrayHelper这类工具类 - 实操建议:新项目起步,必须从模板开始,别省这一步
create-project 必加的三个参数
裸命令 composer create-project yiisoft/yii2-app-basic basic 在真实环境里基本跑不通,卡在 GitHub rate limit、PHP 版本不兼容、脚本权限失败是常态。
-
--prefer-dist:强制走 ZIP 包,跳过 Git clone,国内快 3–5 倍,且绕开 rate limit -
--no-scripts:跳过模板自带的 post-create-project-cmd(比如 chmod、写别名),避免因缺失fxp/composer-asset-plugin(已废弃)或 Windows 权限问题中断 - 显式指定版本,如
2.0.48:这是 2.0.x 系列最后一个受支持版本(EOL 后仅安全补丁),2.0.*或不写版本可能拉到不兼容 PHP 8.1+ 的旧构建
推荐命令:composer create-project --prefer-dist --no-scripts yiisoft/yii2-app-basic myapp 2.0.48
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
装完不跑 php init 就等于没装
尤其对 yii2-app-advanced,create-project 只复制骨架,environments/ 下的真实配置、common/config/main-local.php 占位符、frontend/web/index.php 的调试开关,全靠 php init 写入。跳过这步,php yii migrate 会报找不到 db 组件,debug 面板白屏,Yii::setAlias('@app', ...) 失效导致整个启动崩掉。
- 实操建议:进项目根目录后立刻执行
php init --env=Development --overwrite=All - Windows 用户若提示
'php' is not recognized,用绝对路径,例如C:\php\php.exe init - 常见错误现象:
No input file specified或Class 'yii\web\Application' not found,90% 是因为init没跑,或跑了但选了 Production 模式却没配数据库
Web 服务器指向错一个目录就全挂
Yii2 的入口不在项目根目录,而在 web/ 子目录下。Apache/Nginx 把 root 设成项目根目录,index.php 就会去 ../vendor/autoload.php 找文件——结果找成 ../../vendor/autoload.php,直接 Class not found。
- 本地快速验证:进
myapp/web目录,运行php -S localhost:8080 router.php(必须带router.php,否则 CSS/JS 全 404) - Nginx 配置中
root必须是/path/to/myapp/web,不是/path/to/myapp - 检查
web/index.php第一行:require __DIR__ . '/../vendor/autoload.php';—— 少一个..就全崩
最常被忽略的点:init 脚本生成的 environments/dev/frontend/web/index.php 是开发专用入口,但很多人改了 Apache 配置却忘了把 DocumentRoot 指向它,还用着根目录下的那个空壳 index.php。










