- 版本更新记录
- v1.1.0 - 2019-10-08
- v1.0.16 - 2019-09-20
- v1.0.15 - 2019-09-11
- v1.0.14 - 2019-09-05
- v1.0.13 - 2019-08-28
- v1.0.12 - 2019-08-21
- v1.0.11 - 2019-08-15
- v1.0.10 - 2019-08-09
- v1.0.9 - 2019-08-03
- v1.0.8 - 2019-07-31
- v1.0.7 - 2019-07-26
- v1.0.6 - 2019-07-24
- v1.0.5 - 2019-07-17
- 变更
- v1.0.4 - 2019-07-08
- v1.0.3 - 2019-07-02
- v1.0.2 - 2019-06-25
版本更新记录
v1.1.0 - 2019-10-08
新增
- #401 新增了
Hyperf\HttpServer\Router\Dispatched
对象来储存解析的路由信息,在用户中间件之前便解析完成以便后续的使用,同时也修复了路由里带参时中间件失效的问题; - #402 新增
@AsyncQueueMessage
注解,通过定义此注解在方法上,表明这个方法的实际运行逻辑是投递给 Async-Queue 队列去消费; - #418 允许发送 WebSocket 消息到任意的 fd,即使当前的 Worker 进程不持有对应的 fd,框架会自动进行进程间通讯来实现发送;
- #420 为数据库模型增加新的事件机制,与 PSR-15 的事件调度器相配合,可以解耦的定义 Listener 来监听模型事件;
- #429 #643 新增 Validation 表单验证器组件,这是一个衍生于 illuminate/validation 的组件,感谢 Laravel 开发组提供如此好用的验证器组件,;
- #441 当 Redis 连接处于低使用频率的情况下自动关闭空闲连接;
- #478 更好的适配 OpenTracing 协议,同时适配 Jaeger,Jaeger 是一款优秀的开源的端对端分布式调用链追踪系统;
- #500 为
Hyperf\HttpServer\Contract\ResponseInterface
增加链式方法调用支持,解决调用了代理方法的方法后无法再调用原始方法的问题; - #523 为
gen:model
命令新增了table-mapping
选项; - #555 新增了一个全局函数
swoole_hook_flags
来获取由常量SWOOLE_HOOK_FLAGS
所定义的 Runtime Hook 等级,您可以在bin/hyperf.php
通过! defined('SWOOLE_HOOK_FLAGS') && define('SWOOLE_HOOK_FLAGS', SWOOLE_HOOK_ALL);
的方式来定义该常量,即 Runtime Hook 等级; - #596 为
@Inject
注解增加了required
参数,当您定义@Inject(required=false)
注解到一个成员属性上,那么当该依赖项不存在时也不会抛出Hyperf\Di\Exception\NotFoundException
异常,而是以默认值null
来注入,required
参数的默认值为true
,当在构造器注入的情况下,您可以通过对构造器的参数定义为nullable
来达到同样的目的; - #597 为 AsyncQueue 组件的消费者增加
Concurrent
来控制消费速率; - #599 为 AsyncQueue 组件的消费者增加根据当前重试次数来设定该消息的重试等待时长的功能,可以为消息设置阶梯式的重试等待;
- #619 为 Guzzle 客户端增加 HandlerStackFactory 类,以便更便捷地创建一个 HandlerStack;
- #620 为 AsyncQueue 组件的消费者增加自动重启的机制;
- #629 允许通过配置文件的形式为 Apollo 客户端定义
clientIp
,pullTimeout
,intervalTimeout
配置; - #647 根据 server 的配置,自动为 TCP Response 追加
eof
; - #648 为 AMQP Consumer 增加
nack
的返回类型,当消费逻辑返回Hyperf\Amqp\Result::NACK
时抽象消费者会以basic_nack
方法来响应消息; - #654 增加所有 Swoole Event 的默认回调和对应的 Hyperf 事件;
变更
- #437
Hyperf\Testing\Client
在遇到异常时不再直接抛出异常而是交给 ExceptionHandler 流程处理; - #463 简化了
container.php
文件及优化了注解缓存机制;
新的 config/container.php 文件内容如下:
<?php
use Hyperf\Di\Container;
use Hyperf\Di\Definition\DefinitionSourceFactory;
use Hyperf\Utils\ApplicationContext;
$container = new Container((new DefinitionSourceFactory(true))());
if (! $container instanceof \Psr\Container\ContainerInterface) {
throw new RuntimeException('The dependency injection container is invalid.');
}
return ApplicationContext::setContainer($container);
- #486
Hyperf\HttpMessage\Server\Request
的getParsedBody
方法现在可以直接处理 JSON 格式的数据了; - #523 调整
gen:model
命令生成的模型类名默认为单数,如果表名为复数,则默认生成的类名为单数; - #614 #617 调整了 ConfigProvider 类的结构, 同时将
config/dependencies.php
文件移动到了config/autoload/dependencies.php
内,且文件结构去除了dependencies
层,此后也意味着您也可以将dependencies
配置写到config/config.php
文件内;
Config Provider 内数据结构的变化:之前:
'scan' => [
'paths' => [
__DIR__,
],
'collectors' => [],
],
现在:
'annotations' => [
'scan' => [
'paths' => [
__DIR__,
],
'collectors' => [],
],
],
增加了一层 annotations,这样将与配置文件结构一致,不再特殊
- #630 变更了
Hyperf\HttpServer\CoreMiddleware
类的实例化方式,使用make()
来替代了new
; - #631 变更了 AMQP Consumer 的实例化方式,使用
make()
来替代了new
; - #637 调整了Hyperf\Contract\OnMessageInterface
和
Hyperf\Contract\OnOpenInterface的第一个参数的类型约束, 使用
Swoole\WebSocket\Server替代
Swoole\Server`; - #638 重命名了
db:model
命令为gen:model
命令,同时增加了一个 Visitor 来优化创建的$connection
成员属性,如果要创建的模型类的$connection
属性的值与继承的父类一致,那么创建的模型类将不会包含此属性;
移除
- #401 移除了
Hyperf\JsonRpc\HttpServerFactory
,Hyperf\HttpServer\ServerFactory
,Hyperf\GrpcServer\ServerFactory
类; - #402 移除了弃用的
AsyncQueue::delay
方法; - #563 移除了弃用的
Hyperf\Server\ServerInterface::SERVER_TCP
常量,使用Hyperf\Server\ServerInterface::SERVER_BASE
来替代; - #602 移除了
Hyperf\Utils\Coroutine\Concurrent
的timeout
参数; - #612 移除了 RingPHP Handler 里没有使用到的
$url
变量; - #616 #618 移除了 Guzzle 里一些无用的代码;
优化
- #644 优化了注解扫描的流程,分开
app
和vendor
两部分来扫描注解,大大减少了用户的扫描耗时; - #653 优化了 Swoole shortname 的检测逻辑,现在的检测逻辑更加贴合 Swoole 的实际配置场景,也不只是
swoole.use_shortname = "Off"
才能通过检测了;
修复
- #448 修复了当 HTTP Server 或 WebSocket Server 存在时,TCP Server 有可能无法启动的问题;
- #623 修复了当传递一个
null
值到代理类的方法参数时,方法仍然会获取方法默认值的问题;
v1.0.16 - 2019-09-20
新增
- #565 增加对 Redis 客户端的
options
配置参数支持; - #580 增加协程并发控制特性,通过
Hyperf\Utils\Coroutine\Concurrent
可以实现一个代码块内限制同时最多运行的协程数量;
变更
- #583 当
BaseClient::start
失败时会抛出Hyperf\GrpcClient\Exception\GrpcClientException
异常; - #585 当投递到 TaskWorker 执行的 Task 失败时,会回传异常到 Worker 进程中;
修复
- #564 修复某些情况下
Coroutine\Http2\Client->send
返回值不正确的问题; - #567 修复当 JSON RPC 消费者配置 name 不是接口时,无法生成代理类的问题;
- #571 修复 ExceptionHandler 的
stopPropagation
的协程变量污染的问题; - #579 动态初始化
snowflake
的 MetaData,主要修复当在命令模式下使用 Snowflake 时,比如di:init-proxy
命令,会连接到 Redis 服务器至超时;
v1.0.15 - 2019-09-11
修复
- #534 修复 Guzzle HTTP 客户端的
CoroutineHanlder
没有处理状态码为-3
的情况; - #541 修复 gRPC 客户端的
$client
参数设置错误的问题; - #542 修复
Hyperf\Grpc\Parser::parseResponse
无法支持 gRPC 标准状态码的问题; - #551 修复当服务端关闭了 gRPC 连接时,gRPC 客户端会残留一个死循环的协程;
- #558 修复
UDP Server
无法正确配置启动的问题;
优化
- #549 优化了
Hyperf\Amqp\Connection\SwooleIO
的read
和write
方法,减少不必要的重试; - #559 优化
Hyperf\HttpServer\Response::redirect()
方法,自动识别链接首位是否为斜杠并合理修正参数; - #560 优化
Hyperf\WebSocketServer\CoreMiddleware
,移除了不必要的代码;
移除
- #545 移除了
Hyperf\Database\Model\SoftDeletes
内无用的restoring
和restored
静态方法;
即将移除
- #558 标记了
Hyperf\Server\ServerInterface::SERVER_TCP
常量为弃用
状态,该常量将于v1.1
移除,由更合理的Hyperf\Server\ServerInterface::SERVER_BASE
常量替代;
v1.0.14 - 2019-09-05
新增
- #389 #419 #432 #524 新增 Snowflake 官方组件, Snowflake 是一个由 Twitter 提出的分布式全局唯一 ID 生成算法,hyperf/snowflake 组件实现了该算法并设计得易于使用,同时在设计上提供了很好的可扩展性,可以很轻易的将该组件转换成其它基于 Snowflake 算法的变体算法;
- #525 为
Hyperf\HttpServer\Contract\ResponseInterface
增加一个download()
方法,提供便捷的下载响应返回;
变更
- #482 生成模型文件时,当设置了
refresh-fillable
选项时重新生成模型的fillable
属性,同时该命令的默认情况下将不会再覆盖生成fillable
属性; - #501 当
Mapping
注解的path
属性为一个空字符串时,那么该路由则为/prefix
; - #513 如果项目设置了
app_name
属性,则进程名称会自动带上该名称; - #508 #526 当在非协程环境下执行
Hyperf\Utils\Coroutine::parentId()
方法时会返回一个null
值;
修复
- #479 修复了当 Elasticsearch client 的
host
属性设置有误时,返回类型错误的问题; - #514 修复当 Redis 密码配置为空字符串时鉴权失败的问题;
- #527 修复 Translator 无法重复翻译的问题;
v1.0.13 - 2019-08-28
新增
- #449 新增一个独立组件 hyperf/translation, 衍生于 illuminate/translation;
- #449 为 GRPC-Server 增加标准错误码;
- #450 为
Hyperf\Database\Schema\Schema
类的魔术方法增加对应的静态方法注释,为 IDE 提供代码提醒的支持;
变更
- #451 在使用
@AutoController
注解时不再会自动为魔术方法生成对应的路由; - #468 让 GRPC-Server 和 HTTP-Server 提供的异常处理器处理所有的异常,而不只是
ServerException
;
修复
v1.0.12 - 2019-08-21
新增
- #405 增加
Hyperf\Utils\Context::override()
方法,现在你可以通过override
方法获取某些协程上下文的值并修改覆盖它; - #415 对 Logger 的配置文件增加多个 Handler 的配置支持;
变更
- #431 移除了
Hyperf\GrpcClient\GrpcClient::openStream()
的第 3 个参数,这个参数不会影响实际使用;
修复
- #414 修复
Hyperf\WebSockerServer\Exception\Handler\WebSocketExceptionHandler
内的变量名称错误的问题; - #424 修复 Guzzle 在使用
Hyperf\Guzzle\CoroutineHandler
时配置proxy
参数时不支持数组传值的问题; - #430 修复
Hyperf\HttpServer\Request::file()
当以一个 Name 上传多个文件时,返回格式不正确的问题; - #431 修复 GRPC Client 的 Request 对象在发送 Force-Close 请求时缺少参数的问题;
v1.0.11 - 2019-08-15
新增
- #366 增加
Hyperf\Server\Listener\InitProcessTitleListener
监听者来设置进程名称, 同时增加了Hyperf\Framework\Event\OnStart
和Hyperf\Framework\Event\OnManagerStart
事件;
修复
- #361 修复
db:model
命令在 MySQL 8 下不能正常运行; - #369 修复实现
\Serializable
接口的自定义异常类不能正确的序列化和反序列化问题; - #384 修复用户自定义的
ExceptionHandler
在 JSON RPC Server 下无法正常工作的问题,因为框架默认自动处理了对应的异常; - #370 修复了
Hyperf\GrpcClient\BaseClient
的$client
属性在流式传输的时候设置了错误的类型的值的问题, 同时增加了默认的content-type
为application/grpc+proto
,以及允许用户通过自定义Request
对象来重写buildRequest()
方法;
变更
- #356 #390 优化 aysnc-queue 组件当生成 Job 时,如果 Job 实现了
Hyperf\Contract\CompressInterface
,那么 Job 对象会被压缩为一个更小的对象; - #358 只有当
$enableCache
为true
时才生成注解缓存文件; - #359 #390 为
Collection
和Model
增加压缩能力,当类实现Hyperf\Contract\CompressInterface
可通过compress
方法生成一个更小的对象;
v1.0.10 - 2019-08-09
新增
- #321 为 HTTP Server 的 Controller/RequestHandler 参数增加自定义对象类型的数组支持,特别适用于 JSON RPC 下,现在你可以通过在方法上定义
@var Object[]
来获得框架自动反序列化对应对象的支持; - #324 增加一个实现于
Hyperf\Contract\IdGeneratorInterface
的 ID 生成器NodeRequestIdGenerator
; - #336 增加动态代理的 RPC 客户端功能;
- #346 #348 为
hyperf/cache
缓存组件增加文件驱动;
变更
- #330 当扫描的 $paths 为空时,不输出扫描信息;
- #328 根据 Composer 的 PSR-4 定义的规则加载业务项目;
- #329 优化 JSON RPC 服务端和客户端的异常消息处理;
- #340 为
make
函数增加索引数组的传参方式; - #349 重命名下列类,修正由于拼写错误导致的命名错误;
原类名 | 修改后的类名 |
---|---|
Hyperf\Database\Commands\Ast\ModelUpdateVistor | Hyperf\Database\Commands\Ast\ModelUpdateVisitor |
Hyperf\Di\Aop\ProxyClassNameVistor | Hyperf\Di\Aop\ProxyClassNameVisitor |
Hyperf\Di\Aop\ProxyCallVistor | Hyperf\Di\Aop\ProxyCallVisitor |
修复
- #325 优化 RPC 服务注册时会多次调用 Consul Services 的问题;
- #332 修复
Hyperf\Tracer\Middleware\TraceMiddeware
在新版的 openzipkin/zipkin 下的类型约束错误; - #333 修复
Redis::delete()
方法在 5.0 版不存在的问题; - #334 修复向阿里云 ACM 配置中心拉取配置时,部分情况下部分配置无法更新的问题;
- #337 修复当 Header 的 key 为非字符串类型时,会返回 500 响应的问题;
- #338 修复
ProviderConfig::load
在遇到重复 key 时会导致在深度合并时将字符串转换成数组的问题;
v1.0.9 - 2019-08-03
新增
修复
- #300 让 AsyncQueue 的消息于子协程内来进行处理,修复
attempts
参数与实际重试次数不一致的问题; - #305 修复
Hyperf\Utils\Arr::set
方法的$key
参数不支持int
个null
的问题; - #312 修复
Hyperf\Amqp\BeforeMainServerStartListener
监听器的优先级错误的问题; - #315 修复 ETCD 配置中心在 Worker 进程重启后或在自定义进程内无法使用问题;
- #318 修复服务会持续注册到服务中心的问题;
变更
- #323 强制转换
Cacheable
和CachePut
注解的$ttl
属性为int
类型;
v1.0.8 - 2019-07-31
新增
变更
修复
- #271 修复了 AOP 在
classes
只会策略下配置同一个类的多个方法只会实现第一个方法的代理方法的问题; - #285 修复了 AOP 在匿名类下生成节点存在丢失的问题;
- #286 自动
rollback
没有commit
或rollback
的 MySQL 连接; - #292 修复了
Request::header
方法的$default
参数无效的问题; - #293 修复了
Arr::get
方法的$key
参数不支持int
andnull
传值的问题;
v1.0.7 - 2019-07-26
修复
v1.0.6 - 2019-07-24
新增
- #203 #236 #247 #252 增加视图组件,支持 Blade 引擎和 Smarty 引擎;
- #203 增加 Task 组件,适配 Swoole Task 机制;
- #245 增加 TaskWorkerStrategy 和 WorkerStrategy 两种定时任务调度策略.
- #251 增加用协程上下文作为储存的缓存驱动;
- #254 增加
RequestMapping::$methods
对数组传值的支持, 现在可以通过@RequestMapping(methods={"GET"})
和@RequestMapping(methods={RequestMapping::GET})
两种新的方式定义方法; - #255 控制器返回
Hyperf\Utils\Contracts\Arrayable
会自动转换为 Response 对象, 同时对返回字符串的响应对象增加text/plain
Content-Type; - #256 如果
Hyperf\Contract\IdGeneratorInterface
存在容器绑定关系, 那么json-rpc
客户端会根据该类自动生成一个请求 ID 并储存在 Request attribute 里,同时完善了JSON RPC
在 TCP 协议下的服务注册及健康检查;
变更
修复
- #235 为
grpc-server
增加了默认的错误处理器,防止错误抛出. - #240 优化了 OnPipeMessage 事件的触发,修复会被多个监听器获取错误数据的问题;
- #257 修复了在某些环境下无法获得内网 IP 的问题;
v1.0.5 - 2019-07-17
新增
变更
- #195 变更
retry()
函数的$times
参数的行为意义, 表示重试的次数而不是执行的次数; - #198 优化
Hyperf\Di\Container
的has()
方法, 当传递一个不可实例化的示例(如接口)至$container->has($interface)
方法时,会返回false
; - #199 当生产 AMQP 消息失败时,会自动重试一次;
- #200 通过 Git 打包项目的部署包时,不再包含
tests
文件夹;
修复
- #176 修复
LengthAwarePaginator::nextPageUrl()
方法返回值的类型约束; - #188 修复 Guzzle Client 的代理设置不生效的问题;
- #211 修复 RPC Client 存在多个时会被最后一个覆盖的问题;
- #212 修复 Guzzle Client 的
ssl_key
和cert
配置项不能正常工作的问题;
v1.0.4 - 2019-07-08
新增
- #140 支持 Swoole v4.4.0.
- #152 数据库连接在低使用率时连接池会自动释放连接
- #163 constants 组件的
AbstractConstants::__callStatic
支持自定义参数
变更
- #124
DriverInterface::push
增加$delay
参数用于设置延迟时间, 同时DriverInterface::delay
将标记为弃用的,将于 1.1 版本移除 - #125 更改
config()
函数的$default
参数的默认值为null
.
修复
- #110 #111 修复
Redis::select
无法正常切换数据库的问题 - #131 修复
middlewares
配置在Router::addGroup
下无法正常设置的问题 - #132 修复
request->hasFile
判断条件错误的问题 - #135 修复
response->redirect
在调整外链时无法正确生成链接的问题 - #139 修复 ConsulAgent 的 URI 无法自定义设置的问题
- #148 修复当
migrates
文件夹不存在时无法生成迁移模板的问题 - #169 修复处理请求时没法正确处理数组类型的参数
- #170 修复当路由不存在时 WebSocket Server 无法正确捕获异常的问题
移除
- #131 移除
Router
options
里的server
参数
v1.0.3 - 2019-07-02
新增
- #48 增加 WebSocket 协程客户端及服务端
- #51 增加了
enableCache
参数去控制DefinitionSource
是否启用注解扫描缓存 - #61 通过
db:model
命令创建模型时增加属性类型 - #65 模型缓存增加 JSON 格式支持
变更
- #46 移除了
hyperf/di
,hyperf/command
andhyperf/dispatcher
组件对hyperf/framework
组件的依赖
修复
- #45 修复当引用了
hyperf/websocket-server
组件时有可能会导致 HTTP Server 启动失败的问题 - #55 修复方法级别的
@Middleware
注解可能会被覆盖的问题 - #73 修复
db:model
命令对短属性处理不正确的问题 - #88 修复当控制器存在多层文件夹时生成的路由可能不正确的问题
- #101 修复常量不存在
@Message
注解时会报错的问题
v1.0.2 - 2019-06-25
新增
修复
- 修复了 HTTP Server 会被 WebSocket Server 影响的问题(WebSocket Server 尚未发布);
- 修复了代理类部分注解没有生成的问题;
- 修复了数据库连接池在单测环境下会无法获取连接的问题;
- 修复了 co-phpunit 在某些情况下不能按预期运行的问题;
- 修复了模型事件
creating
,updating
… 运行与预期不一致的问题; - 修复了
flushContext
方法在单测环境下不能按预期运行的问题;