Yii3 发布了
千呼万唤始出来!历经多年深度开发与打磨,Yii3 已正式发布!
Yii 框架始终恪守一套核心原则:高性能、高灵活性且预设合理配置、贴合开发实践、简洁易用、语义明确、风格一致。Yii3 亦延续了这一优良传统。
尽管 Yii 1.1 与 Yii 2.0 已是十分优秀的框架,但 Yii3 的诞生旨在更进一步优化体验,解决旧版本存在的如下短板:
1.Yii 2.0 生态相对封闭,集成通用 PHP 包的配置流程较为繁琐; 2.存在部分魔术方法与隐式逻辑,Yii 2.0 中引入的对象行为不符合 PHP 标准规范; 3.受限于向下兼容要求,未能充分适配 PHP 标准,也未全面运用现代 PHP 特性; 4.存在部分反模式设计,例如默认提供的服务定位器(Service Locator),长期来看会影响项目的可测试性与可维护性。
下文将为你总结这款万众期待版本的部分亮点特性。若你迫不及待想上手体验,可直接查阅快速开始章节。
独立化组件包 ¶
不同于 Yii 1.1 和 Yii 2.0 的单体式框架架构,Yii3 是一套由超 130 个官方组件包构成的生态系统。这些组件包既可独立用于任意 PHP 项目,也可组合成一套功能完整的框架,其使用体验与 Yii 2.0、Yii 1.1 相近。应用模板在此过程中可提供极大助力。
应用模板 ¶
框架内置三款开箱即用的应用模板:
Web 模板:适用于传统服务端渲染应用; API 模板:适用于 API 接口开发; 控制台模板:适用于纯命令行工具与后台任务进程开发。
与 Yii 2.0 不同,这些模板极度精简,仅预设了路由、配置、依赖注入(DI)容器、环境变量等核心基础功能。而数据库连接等拓展功能,默认并未集成到模板中。按需安装,拒绝臃肿,只为提供精准解决方案。
兼容任意 PHP 组件包 ¶
Yii 2.0 更倾向于使用框架专属扩展,而 Yii3 则实现了与 Packagist 上所有 PHP 包的良好兼容 —— 无论是 PSR 标准兼容包、Symfony 生态组件,还是通用 PHP 代码,均可无缝集成。框架的依赖注入容器能够对各类组件包进行统一配置。
Yii3 拥抱整个 PHP 生态,拒绝重复造轮子。它可与任意 PHP 类库无缝集成,无厂商锁定、无专属 API,仅通过现代 PHP 标准,助力开发者充分利用整个生态的创新成果。
一流的依赖注入(DI)容器 ¶
依赖注入容器是 Yii3 框架的核心组件,它负责整合所有独立组件包,自动解析依赖关系,并按需提供类实例。其使用方式简洁直观:
return [
// 接口与实现类的映射关系
EngineInterface::class => EngineMarkOne::class,
// 详细配置项
MyServiceInterface::class => [
'class' => MyService::class,
'__construct()' => [42],
'setDiscount()' => [10],
],
// 工厂闭包配置
'api' => static fn(ApiConfig $config) => new ApiClient($config),
];
// 基于类型注解自动注入依赖
final readonly class MyController
{
public function __construct(
private CacheInterface $cache
) {}
}
该容器的另一优势在于运行时性能优异。配置文件即是实际执行逻辑,全程无魔术方法参与,必要时甚至可借助 XDebug 进行逐行调试。
配置系统 ¶
Yii3 延续了 Yii 2.0 成熟的配置理念,并将高级应用中支持多环境、配置覆盖等能力进行了提炼与优化。其配置系统功能强大,可根据项目需求适配几乎任意目录结构。默认情况下,应用模板的配置分为 Web(或 API)与控制台两大模块,同时包含部分通用共享配置。配置内容主要分为两部分:DI 容器配置(用于实现接口与配置类的映射)与参数配置(用于组件类的初始化)。
'yiisoft/view' => [
'basePath' => null,
'parameters' => [
'assetManager' => Reference::to(AssetManager::class),
'applicationParams' => Reference::to(ApplicationParams::class),
'aliases' => Reference::to(Aliases::class),
'urlGenerator' => Reference::to(UrlGeneratorInterface::class),
'currentRoute' => Reference::to(CurrentRoute::class),
],
],
'yiisoft/yii-view-renderer' => [
'viewPath' => null,
'layout' => '@src/Web/Shared/Layout/Main/layout.php',
'injections' => [
Reference::to(CsrfViewInjection::class),
],
],
安全特性 ¶
与 Yii 1.1 和 Yii 2.0 一脉相承,Yii3 高度重视安全问题。在视图渲染、数据库抽象等所有组件的设计与实现阶段,安全考量均被置于首位。
框架内置的安全相关功能包括:
此外,框架还提供了针对常见安全场景的辅助工具,例如 CSRF 防护组件。
官方文档中还设有专门章节,详细介绍了既定的安全响应流程。
数据库支持 ¶
Yii 2.0 拥有一套出色的数据库抽象层。Yii3 团队首先将其提炼为独立组件包,随后进行了重构与优化,最终形成了 yiisoft/db 组件 —— 它提供了数据库访问、Schema 管理以及功能强大的查询构造器。 基于该组件,团队还构建了迁移工具、数据库缓存等拓展功能,同时实现了一套语义更明确、兼顾开发效率的 Active Record 模型。
$posts = $connection
->select(['id', 'title', 'created_at'])
->from('{{%posts}}')
->where(['status' => 'published'])
->andWhere(['>', 'views', 1000])
->orderBy(['created_at' => SORT_DESC])
->limit(10)
->all();
除了框架自研的数据库层,你还可以根据喜好选择 Cycle ORM、Doctrine,或直接使用 PDO、数据库原生驱动进行查询。Yii3 绝不强制开发者绑定单一方案。
数据抽象层 ¶
功能强大的数据抽象组件 yiisoft/data 及其配套的列表、网格等展示组件,是构建通用后台管理系统的理想选择。该抽象层支持数据格式化、分页、排序功能,能够实现任意数据源与任意操作 / 展示层的灵活对接。
缓存机制 ¶
Yii3 的缓存机制较 Yii 2.0 更为完善。首先,框架默认提供缓存击穿防护能力;其次,所有缓存驱动均兼容 PSR-16 标准—— 这意味着你可以直接使用任意 PSR-16 实现,适配特定的存储介质。
团队已实现的缓存后端包括:
- APCu
- 数据库(DB)
- 文件系统(Files)
- Memcached
- Redis
标准优先原则 ¶
与缓存机制一致,Yii3 在更多核心功能上均采用了 PSR 标准接口:
- 日志功能:可直接使用框架内置日志组件,也可根据需求替换为 Monolog 等第三方实现;
- 中间件系统:可直接引入 Packagist 上的各类解决方案(如 CORS 处理组件),无需修改任何代码即可集成;
- 请求 - 响应抽象:支持高效的单元测试与 Worker 运行模式;
- 依赖注入容器:支持替换或组合其他符合 PSR 标准的容器实现。
标准优先的架构设计,既能确保代码的可移植性与前瞻性,又能让开发者充分运用现代 PHP 工具链。
Worker 运行模式 ¶
在传统 PHP 服务架构中,框架初始化与数据库连接等操作会在每次请求时重复执行,这对性能造成了不小的损耗。Yii3 支持与 RoadRunner、Swoole、FrankenPHP 等运行时协同工作,以 Worker 模式运行。在该模式下,框架仅需初始化一次,即可处理大量请求 - 响应周期,大幅降低响应时间。
不过需要注意的是,Worker 模式下,多个请求 - 响应进程会共享部分内存状态。因此开发者需注意隔离状态数据(或避免存储状态数据),并防范内存泄漏问题。Yii3 对此提供了充分支持:所有组件包均被设计为无状态模式,或可在每次请求开始时自动重置状态。
全功能支持传统 Web 应用 ¶
并非所有项目都需要开发前后端分离的 API 系统。Yii3 为传统服务端渲染的 Web 应用提供了完整的功能支持,包括: 视图组件与助手类、表单处理工具、各类 Widget 组件等。
此外,框架还提供了基于 Bootstrap 5 和 Bulma 样式库的官方 Widget 组件。
完善的 API 开发工具集 ¶
Yii3 提供了丰富的工具,助力开发者快速构建 API 服务:
未来团队计划推出更多功能,当前工具集已足以支撑高性能 API 系统的开发。
HTTP 层与网络工具 ¶
相较于前代框架,Yii3 的 HTTP 层实现更为精细,且全面遵循 PSR 标准接口。在这些底层接口之上,框架提供了便捷的抽象组件:
同时,框架还内置了网络工具类,助力开发者处理 IP 协议相关操作。
用户输入处理与数据验证 ¶
Yii3 提供了一套基于注解驱动的强大验证器,支持从 HTTP (input-http)请求或其他来源自动填充表单数据,并配备了完善的表单处理工具。
<?php
declare(strict_types=1);
namespace App\Web\Echo;
use Yiisoft\FormModel\FormModel;
use Yiisoft\Validator\Label;
use Yiisoft\Validator\Rule\Length;
final class Form extends FormModel
{
#[Label('需要回显的消息')]
#[Length(min: 2)]
public string $message = '';
}
辅助工具类 ¶
框架提供了丰富的辅助工具类,简化日常开发中的通用任务:
国际化(i18n)支持 ¶
Yii 框架的社区成员与核心开发团队遍布全球,因此我们对国际化功能有着深刻的理解与高度的重视。
Yii3 内置的国际化能力包括:
- 基于 intl 扩展与 ICU 格式化标准的消息翻译系统
- 视图层国际化支持
- 路由系统国际化支持
测试友好性 ¶
合理的依赖倒置设计,让基于 Yii3 开发的代码极易进行单元测试。遵循 PSR 标准的请求 - 响应抽象层,允许开发者在不启动 HTTP 服务的情况下完成 API 测试。
为进一步降低测试门槛,yiisoft/test-support 组件包提供了一系列专用于测试场景的 PSR 标准实现类。
错误处理机制 ¶
我们十分珍视开发者的时间,因此在错误提示信息与错误页面设计上投入了大量精力,力求为开发者提供最实用的调试体验:错误消息附带完整上下文信息,杜绝 “Error” 这类无意义的提示;引入友好异常(Friendly Exceptions) 机制:在开发环境下,异常页面会展示错误原因分析与可能的修复方案。未来团队计划进一步实现 “一键修复” 功能。
错误页面会展示完整的错误信息,针对堆栈跟踪的每一层级,都会显示对应的源代码,并高亮标记错误发生的行。默认情况下,属于框架组件的堆栈信息会被折叠 —— 因为框架代码经过了充分测试,错误大概率源于业务代码。
核心错误处理组件 yiisoft/error-handler 较 Yii2 版本更为强大:支持处理内存不足、致命错误等极端场景;可将特定异常类型映射为自定义异常;支持以不同格式输出错误响应。
此外,框架还提供了 Sentry 集成错误监控系统的组件包。
完善的文档体系 ¶
Yii3 提供了全方位的文档资源,助力开发者快速上手:
- 官方权威指南:全面介绍框架整体使用方法的核心文档;
- 社区实践手册:收录各类基于 Yii3 实现特定功能的实战案例;
- 全量 API 文档:所有组件包的公共 API 均提供清晰的可浏览文档;
- 独立组件包文档:每个组件包均附带 README 与详细使用说明。
严苛的质量标准 ¶
Yii3 的所有组件包均遵循极高的代码质量标准。每一行代码都经过多层自动化测试与代码分析工具的严格校验。
单元测试覆盖率接近 100%;基于 Psalm/PhpStan 的严格类型检查;变异测试得分接近 100%;所有代码变更均需经过公开的评审流程。这些措施为你的项目提供了异常稳定且可预测的技术底座。
可预测的版本发布策略 ¶
框架严格遵循语义化版本(SemVer) 规范,各组件包独立进行版本号管理:补丁版本(Patch):仅修复 Bug,绝不引入破坏性变更;次版本(Minor):新增功能与优化,保持向下兼容;主版本(Major):包含不兼容的 API 变更,需开发者调整代码以适配。
更多实用特性 ¶
除上述亮点外,Yii3 还包含诸多虽不抢眼但至关重要的功能:
Aliases(路径别名) Events(事件系统) Profiler(性能分析器) Requirements checker(环境需求检查器) Mailer(邮件发送组件) Console(控制台工具) Mutex locks(多后端支持的互斥锁)
可能还有部分框架特性未能在本文中提及,期待你亲自探索发现。
实用资源链接 ¶
以下是关于 Yii3 的一些实用资源:
- Yii3 官方首页
- 官方指南,推荐先阅读 “快速开始” 章节
- API 文档
- Yii3 组件包仓库(别忘了点星支持哦!)
- Telegram 交流群
- Yii 项目官网
- Facebook 交流群组
- X官方账号
- LinkedIn 交流群组
致谢 ¶
感谢所有开发者的支持与耐心等待!Yii3 的正式发布,是核心团队、社区贡献者与支持者们齐心协力的成果。
我们坚信,Yii3 代码库将在未来至少十年甚至更久的时间里,为开发者提供稳定可靠的服务。
未来规划
1.团队后续的重点工作计划包括: 2.完善官方指南,补充缺失内容;发布更多组件包,丰富生态工具链; 3.收集社区反馈,持续修复问题、优化体验; 4.优化官方网站。
最后,祝大家圣诞快乐、新年快乐!尽情享受 Yii3 带来的开发体验吧!
新闻归档
热门标签
- yii3
- 扩展
- 发布
- yii2
- debug
- view
- auth client
- html
- bootstrap
- release
- redis
- Yii 1.1
- apidoc
- mongodb
- http
- db
- validation
- cache
- Yii 2.0
- runner
- extensions
- console
- gii
- error handler
- mailer
- http 客户端
- queue
- twig
- translator
- hydrator
- widget
- sphinx
- log
- assets
- config
- router
- middleware
- symfonymailer
- elasticsearch
- widgets
- swiftmailer
- imagine
- 图书
- rbac
- swagger
- data
- csrf
- logging
- fastroute
- application