2025-12-31 65次浏览

千呼万唤始出来!历经多年深度开发与打磨,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 ORMDoctrine,或直接使用 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 的正式发布,是核心团队、社区贡献者与支持者们齐心协力的成果。

我们坚信,Yii3 代码库将在未来至少十年甚至更久的时间里,为开发者提供稳定可靠的服务。

未来规划

1.团队后续的重点工作计划包括: 2.完善官方指南,补充缺失内容;发布更多组件包,丰富生态工具链; 3.收集社区反馈,持续修复问题、优化体验; 4.优化官方网站。

最后,祝大家圣诞快乐、新年快乐!尽情享受 Yii3 带来的开发体验吧!