最稳方式是用 composer create-project 直接拉取 Yii2 官方模板(basic 或 advanced),因其预置了必需的目录结构、配置和初始化脚本;务必设置 cookieValidationKey,确认 runtime 可写,并根据环境合理使用 ./init 和 config.platform.php。

直接用 composer create-project 拉 Yii2 官方模板最稳
别自己建空目录再 composer require 核心包——Yii2 不是单个库,它依赖特定目录结构(web/ 入口、config/ 分环境配置、runtime/ 可写路径等),手动拼容易漏掉关键文件或权限配置。
官方推荐的 basic 或 advanced 模板已预置好这些,开箱即用:
composer create-project --prefer-dist yiisoft/yii2-app-basic myapp
想用高级模板(前后端分离结构)就换最后参数为 yiisoft/yii2-app-advanced。注意:PHP 版本需 ≥ 7.4(Yii2.0.x 实际最低要求是 5.6,但新项目强烈建议 7.4+;若用 Yii2.1.x 则必须 ≥ 7.4)。
-
--prefer-dist强制走压缩包安装,比--prefer-source快且干净 - 安装过程会自动执行
init脚本,生成本地配置(如environments/dev/web/index.php),别跳过 - 如果卡在
Cloning into 'xxx'...,大概率是 GitHub 访问慢,加-vvv看具体卡在哪,再配 Composer 镜像源(国内用阿里云或腾讯云镜像)
初始化后必须改 config/web.php 的 cookieValidationKey
刚装完访问首页报 Invalid Configuration – yii\base\InvalidConfigException?十有八九是这个 key 还没设。Yii2 用它签名 session 和表单 CSRF token,空值直接拒绝启动。
打开 config/web.php,找到 'components' => ['request' => [...]] 这一段,在 'request' 数组里补上:
'cookieValidationKey' => '随便一串32位以上随机字符,比如 y0ur_very_s3cret_k3y_here_abc123',
别用默认注释里的示例值,也别留空。生产环境务必用 yii\helpers\BaseString::randomString(32) 生成并存进环境变量,而不是硬编码在 config 里。
- 这个 key 一旦上线就不能改,否则所有用户 cookie 失效(得重新登录)
- 如果用
advanced模板,前后端两个web/目录都要各自配自己的cookieValidationKey - 某些共享主机不支持
session.save_path写入,默认用系统临时目录,可能被清掉——检查runtime/是否可写比调 key 更优先
composer install 报错 “Your requirements could not be resolved” 怎么办
常见于你手动改过 composer.json 里的 require 版本号,或者本地 PHP 版本和 composer.json 声明的 config.platform.php 不一致。
先确认当前 PHP 版本:php -v;再看 composer.json 里有没有类似这样的段落:
"config": {
"platform": {
"php": "7.4.33"
}
}
如果本地是 8.1,但平台锁死在 7.4,Composer 就会假装自己在 7.4 环境下解析依赖,导致某些扩展(比如 ext-intl)版本冲突。
- 开发时直接删掉
config.platform.php整行,让 Composer 真实检测环境 - 生产部署才需要锁平台版本,确保和线上一致
- 如果还报错,运行
composer why-not yiisoft/yii2:2.0.48(换成你想装的具体版本),看哪个包在拦路 - 别轻易加
--ignore-platform-reqs,它绕过的是 PHP 扩展检查(比如缺mbstring),不是版本逻辑问题
第一次跑 ./init 选 development 还是 production
选 development。这不是“开发环境”和“生产环境”的简单对应,而是决定哪些配置文件被复制、哪些调试工具被启用。
执行 ./init 后,它会把 environments/dev/ 下的配置覆盖到 common/、frontend/ 等目录。其中关键差异包括:
-
dev模式开启debug模块、Gii 代码生成器、详细的错误堆栈;prod模式关掉全部,只留 500 页面 -
dev的index.php里YII_DEBUG = true,YII_ENV = 'dev';prod是false和'prod' - 就算你最终要上线,也先用
dev模式跑通整个流程,再切prod并验证日志、缓存、错误页是否正常
切换模式不是改一个开关,它会重写一堆文件。所以别手抖选错——选错了就删掉 environments/ 外的所有配置文件,再重新 ./init 一次。










