Skip to content

从 2.0 版本升级

如果您未曾使用过 Yii 2.0,可以跳过本节,直接阅读“入门” 章节。

尽管 Yii3 与 Yii 2.0 有一些共同的理念和价值观,但两者在概念上存在显著差异。升级并无捷径,建议先查看 Yii 2.0 的维护策略和生命周期终止日期,并考虑将新项目迁移到 Yii3,同时保持现有项目继续使用 Yii 2.0。

PHP 要求

Yii3 要求 PHP 8.2 或更高版本。因此,它使用了 Yii 2.0 中未使用的语言特性:

预备重构

在将 Yii 2.0 项目迁移到 Yii3 之前,先进行重构是个好主意。这既能简化迁移过程,也能在项目尚未切换到 Yii3 时直接受益。

使用 DI 替代服务定位器

由于 Yii3 强制要求注入依赖,建议提前做好准备,将 服务定位器(Yii::$app->)切换为 DI 容器

如果因某种原因使用 DI 容器存在困难,可以考虑将所有 Yii::$app-> 调用迁移到控制器 动作和小部件中,并从控制器手动将依赖传递给需要它的对象。

有关该理念的说明,请参阅依赖注入与容器

引入仓储层获取数据

由于 Active Record 并非 Yii3 中操作数据库的唯一方式,建议引入仓储层来隐藏数据获取的实现细节,并将其集中管理。后续可以随时对其进行重构:

php
final readonly class PostRepository
{
    public function getArchive()
    {
        // ...
    }
    
    public function getTop10ForFrontPage()
    {
        // ...
    }

}

将领域层与基础设施层分离

如果您的应用拥有复杂的领域逻辑,建议将其与框架提供的基础设施层分离,即所有业务逻辑应放入与框架无关的类中。

将更多逻辑移入组件

Yii3 的服务在概念上与 Yii 2.0 的组件类似,因此建议将应用程序中可复用的部分移入组件。

需要学习的内容

Docker

默认应用程序模板使用 Docker 来运行应用程序。建议学习并在自己的项目中使用 Docker,因为它提供了许多好处:

  1. 与生产环境完全相同的运行环境。
  2. 除 Docker 本身外,无需安装任何其他软件。
  3. 环境按应用程序隔离,而非按服务器共享。

环境变量

Yii3 应用程序模板使用 环境变量 来配置应用程序的各个部分。这一概念对于容器化应用程序非常实用,但对于 Yii 1.1 和 Yii 2.0 的用户来说可能较为陌生。

动作

与 Yii 2.0 不同,Yii3 不要求使用控制器。它改为使用 动作,动作可以是任意可调用对象。您可以像 Yii 2 那样将动作组织到控制器中,但这并非必须。

应用结构

Yii3 建议的应用程序结构与 Yii 2.0 有所不同,详见 应用程序结构

尽管如此,Yii3 具有良好的灵活性,仍然可以在 Yii3 中使用类似 Yii 2.0 的结构。