Yii Framework 3.0 升级指南 [ 技术分享 ]
Yii Framework 3.0 升级指南
这个文件包含Yii 3.0的升级说明。 当您将Yii从一个版本升级到另一个版本时,可能会破坏您的应用程序。 虽然我们尽可能地确保向后兼容性(BC),但是有时还是无法避免的。 升级到Yii 3.0可能需要对应用程序和扩展程序进行重大更改,这些更改是可以接受的,并且只需要“重构”,而不是“重写”。 所有的“是的,它是”很酷的东西和Yii的灵魂都保留下来了。
变更概要:
- PHP版本最低需要7.1,同时移除了HHVM的支持。
 - Yii将从3.0版本转向semver。
 - 不再使用Subtree-split。
 - 使用Composer提供的自动加载机制来替代Yii自身的自动加载机制。
 - 发布再GitHub上的框架仓库和Packagist上的包被重新命名,并被分割成多个部分:
- yiisoft/yii-core - Yii框架核心包。
 - Yii 2.0 仍然在 yiisoft/yii2 包中进行开发. 仍然会进行Bug的修复已经安全更新。 将不会再加入新特性和功能。 非常欢迎新的Pull Request和项目维护人员。
 - yiisoft/di - PSR-11依赖注入容器。
 - yiisoft/log - PSR-3日志库。
 - yiisoft/cache - PSR-16缓存库。
 - yiisoft/db - 数据库抽象层和 QueryBuilder。
 - yiisoft/db-mysql - MySQL Server DB 扩展。
 - yiisoft/db-pgsql - PostgreSQL Server DB 扩展。
 - yiisoft/db-sqlite - SQLite Server DB 扩展。
 - yiisoft/db-mssql - MSSQL Server DB 扩展。
 - yiisoft/db-oracle - Oracle DB 扩展。
 - yiisoft/active-record - ActiveRecord。
 - yiisoft/rbac - 角色权限控制。
 - yiisoft/view - 视图渲染: 视图和小部件.
 - yiisoft/yii-web - Web应用。
 - yiisoft/yii-rest - REST API。
 - yiisoft/yii-console - 命令行。
 - yiisoft/yii-jquery - JQuery。
 - yiisoft/yii-bootstrap3 - Bootstrap 3。
 - yiisoft/yii-bootstrap4 - Bootstrap 4。
 - yiisoft/yii-dataview - 数据展示。
 - yiisoft/yii-masked-input - Jquery inputmask。
 - yiisoft/yii-captcha - 验证码。
 - Please check [package naming convention] to get an idea about package names.
 - 请参考 扩展包名规范 了解扩展包的名称.
 - 也可以查看所有的 扩展包列表.
 
 - 更多的PSR兼容: PSR-3, PSR-11, PSR-16
 - 核心框架只依赖于PSR抽象接口,你可以自由的选择日志和缓存等的实现。 更多基于PSR的实现将很快到来。
 - 从 
Application和Module 去除了ServiceLocator`, 使用DI容器来替代。 - 数据库抽象层分割成不同的包,允许独立使用。
 - 去除了PJAX支持。
 - 不再支持Cubrid DB。
 - 将日志和分析模块进行分离。
 - 不再使用 yiisoft/yii2-composer。
 - 所有的配置文件都明确的放在每个扩展板的 
config文件夹中,推荐使用 composer-config-plugin。 - 移除了 yii\base\Configurable。
所以 
BaseObject的构造函数中不再包含$config参数。 但是它还是可以加入的。E.g.yii\validators\Validator::__construct()。 - 不再有高级版本应用。 应用程序模板采用的方式已经更改,E.g.:
- yiisoft/yii-project-template - 工程模板
 - yiisoft/yii-base-web - Web应用模板
 
 
Tip: 升级复杂软件项目的依赖关系肯定会带来破坏某些模块的风险,所以一定要备份好项目代码,你无论如何都需要备份 ;)
升级之后,你需要检查你的应用是否正常工作,是否有测试异常。 从一个版本升级到另一个版本时要考虑哪些更改,请参阅下面的说明。
Note: 升级说明是迭代的。也就是说,如果你想从版本A升级到版本C,但是有版本B在A和C之间,你需要按照说明来操作A和B。
从 Yii 2.0.x 升级
- PHP版本最低需要7.1。请确保你的代码能够及时更新。
 - 放弃 
memcache扩展。 使用memcached来代替。 - 移除 
Configurable,也从BaseObject中移除init()方法- 不再支持 
__construct(array $config = []) 
 - 不再支持 
 Yii助手函数完全重写, 同时不再提供任何全局变量:use Yii变更成use yii\helpers\Yii- 不再支持 
Yii::$app:- 推荐使用构造函数DI容器过去应用实例和服务
 - 使用 
Yii::get('service')替代Yii::$app->getService() - 如果其他方法都失败了,可以使用 
Yii::getApp() 
 - 别名变更成为 
Aliases服务:- 推荐使用如下方法获取别名:
- DI容器获取 
aliases服务,或者 $this->app->getAlias()
 - DI容器获取 
 - 推荐通过配置定义别名
 
 - 推荐使用如下方法获取别名:
 - 新增并使用 
Application::t()- 推荐使用 
$this->app->t()而不是Yii::t() 
 - 推荐使用 
 - 移除 
Yii::configure()- 如果其他方法都失败了,可以使用 
yii\di\AbstractContainer::configure() 
 - 如果其他方法都失败了,可以使用 
 Yii::$container变更成为私有变量:- 无法直接使用
 - 通过DI隐式使用容器
 
- 入口文件不再需要
require Yii - 通过 
Yii::setContainer()来使用Yii的特性- 因为它可以访问日志、分析以及国际化等组件
 - Yii中的方法会拥有更加通用的行为
 - 查看 推荐使用的入口文件
 
 - 移除 
Yii::$logger和Yii::$profiler, 使用DI代替 - 常量的定义移动到 
config/defines.phpYII_DEBUG默认为YII_ENV_DEVYII2_PATH重命名为YII_PATH
 getObjectVars()移动到ArrayHelper
未完待续...
共 4 条回复
- 
 - 
qq332984152 回复于 2020-04-28 15:48 举报YII3 快发布了吗?
 - 
 - 
思贤--值得信任的朋友 回复于 2020-12-14 09:36 举报期待Yii3的更新迭代能带给用户惬意的体验!
 
return19931112 南京
            注册时间:2016-03-24
最后登录:2023-07-08
在线时长:67小时33分
    最后登录:2023-07-08
在线时长:67小时33分
- 粉丝8
 - 金钱8750
 - 威望240
 - 积分11820