yii3尚未发布稳定版,截至2026年7月仍处于开发阶段,依赖php 8.2+,移除了servicelocator,采用构造函数注入,配置统一为php数组,模块化带来隐性维护成本。

Yii3 还没发布稳定版,别被“正式版”误导
截至 2026 年 7 月,Yii3 正式稳定版 仍未发布——你看到的所谓“正式版”多是预发布分支(alpha/beta)或社区误传。官方进度显示仍卡在 RBAC、迁移命令、Gii 替代工具等关键模块补全阶段。强行用在新项目上,等于把团队绑在未冻结的 API 上:今天 yiisoft/rbac 的 execute() 签名改了,明天 yii\rbac\DbManager 的 SQL schema 又不兼容 Yii2 的 auth_assignment 表结构。
PHP 8.2+ 是硬门槛,不是建议项
Yii3 大量依赖 PHP 8.2 特性:public string $name 构造器属性提升、string|int|null 联合类型、#[\Attribute] 元数据。一旦环境低于 8.2,就会报 Fatal error: Call to undefined function yii\di\is_callable() 这类底层错误,且不会降级提示,直接中断。
- CI/CD 流水线必须显式指定
php:8.3-apache或更高镜像 - 本地开发若用
php:8.1拉取composer create-project yiisoft/app,会立即退出并静默失败,不创建任何文件 - 旧项目升级前,得先确认所有扩展(如
ext-redis、ext-pdo_pgsql)都已适配 PHP 8.2+
ServiceLocator 彻底消失,重构成本远超预期
Yii3 删除了 Yii::$app 和隐式服务访问机制。所有组件必须通过构造函数注入,Yii::$app->db、Yii::$app->user 全部失效。这不是语法替换,而是架构重写。
- 控制器里不能再随手调用
Yii::getContainer()->get(LoggerInterface::class),得改成public function __construct(private LoggerInterface $logger) - 自定义 Behavior 若原来依赖
$this->owner->get('cache'),现在必须把CacheInterface作为构造参数传入 - 全局配置统一放在
config/common.php,只支持 PHP 数组键值对,不支持 YAML/XML
模块化是优势,也是陷阱
Yii3 把框架拆成 130+ 独立包(yiisoft/router、yiisoft/view 等),按需安装看似灵活,但实际带来三类隐形成本:
- 新手容易漏装核心包,比如忘了
composer require yiisoft/yii-web,结果路由不生效却查不到原因 - 第三方包(如
intervention/image)虽可用,但初始化方式变了:Yii2 靠服务提供者自动注册,Yii3 得手动在config/common.php里配'components' => ['image' => [...]] - 团队协作时,各模块版本需严格对齐,
yiisoft/router v3.1和yiisoft/di v3.0混用可能触发容器解析失败
真正该警惕的,不是 Yii3 功能强不强,而是你现在手头有没有人能立刻读懂 PSR-15 中间件栈、能快速排查 BehaviorCollection 接口变更带来的兼容问题、以及愿不愿意为一个尚未冻结的框架投入长期维护成本。











