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.php
YII_DEBUG
默认为YII_ENV_DEV
YII2_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