3.1 升级指南
3.1 升级指南
- 3.1 版本主要修改了
PHP最低版本为8.1,Swoole最低版本为5.0 - 引入
Pest测试框架 - 新增
hyperf/helper,Hyperf\Utils中原有不包含命名空间助手函数迁移至hyperf/helper中 - 改变
hyperf/config多层级配置文件的加载方式,支持.语法,如config('a.c')
Utils 包变动
原有 utils 包中的助手函数没有添加命名空间,可能与其他 composer 包的函数冲突,在 3.1 中进行了移除替换。
对此有两种方式进行处理:
- 确定程序中没有加载会导致函数冲突的包,可以选择直接安装
hyperf/helper即可,helper包中提供不包含命名空间的助手函数,与原有utils中一致 - 在原有调用助手函数的地方增加命名空间,可以使用
rector进行重构,参考重构文档
配置文件加载方式变动
在 3.0 中,配置是以 配置文件名 作为键值存在, 而在 3.1 中,hyperf/config 多层级配置文件的加载方式,是以 相对目录.配置文件名 作为键值存在。
支持 . 语法,如 config('a.c')。
对此需要注意原有项目中以下两种情况的处理
- 3.0 项目中在
config/autoload中创建了子目录,如config/autoload/sub/a.php,原有的config('a')需要修改为config('sub.a')。 - 3.0 项目中的配置文件名中包含
.,如config/autoload/a.b.php,会在使用config('a')的时候返回以下结构,如果你同时还存在config/autoload/a.php配置文件,还将得到合并配置项后的结果。
return [
'a.php中的配置项' => 'a.php中的配置值',
'b' => [
'a.b.php中的配置项' => 'a.b.php中的配置值',
]
];其他改动
- 从 v3.1 版本开始,
hyperf/metirc组件不再默认安装prometheus依赖,所以需要使用prometheus引擎的开发者,需要执行以下命令加载依赖:
composer require promphp/prometheus_client_phpRequest和Response的withHeaders功能发生变化
v3.1 之前的版本会对原来的数据进行保存,类似于 array_merge 原数据,v3.1 版本之后,则是直接将所有的 headers 进行替换
<?php
// v3.1 之前
$request->withHeader('foo', 1)->withHeader('bar', 2); // ['foo' => [1], 'bar' => [2]]
$request->withHeader('foo', 1)->withHeader('foo', 2); // ['foo' => [2]]
$request->withAddedHeader('foo', 1)->withAddedHeader('foo', 2); // ['foo' => [1, 2]]
$request->withHeaders(['foo' => 1])->withHeaders(['bar' => 2]); // ['foo' => [1], 'bar' => [2]]
// v3.1 之后
$request->withHeader('foo', 1)->withHeader('bar', 2); // ['foo' => [1], 'bar' => [2]]
$request->withHeader('foo', 1)->withHeader('foo', 2); // ['foo' => [2]]
$request->withAddedHeader('foo', 1)->withAddedHeader('foo', 2); // ['foo' => [1, 2]]
$request->withHeaders(['foo' => 1])->withHeaders(['bar' => 2]); // ['bar' => [2]]
$request->setHeader('foo', 1)->setHeader('bar', 2); // ['foo' => [1], 'bar' => [2]]
$request->setHeader('foo', 1)->setHeader('foo', 2); // ['foo' => [2]]
$request->addHeader('foo', 1)->addHeader('foo', 2); // ['foo' => [1, 2]]
$request->setHeaders(['foo' => 1])->setHeaders(['bar' => 2]); // ['bar' => [2]]
AMQP消费者consumeMessage方法返回值调整为Result枚举
<?php
// v3.1之前
public function consumeMessage($data, AMQPMessage $message): string
{
return Result::ACK;
}
// v3.1之后
public function consumeMessage($data, AMQPMessage $message): Result
{
return Result::ACK;
}