版本更新记录

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 是一款优秀的开源的端对端分布式调用链追踪系统;
  • #500Hyperf\HttpServer\Contract\ResponseInterface 增加链式方法调用支持,解决调用了代理方法的方法后无法再调用原始方法的问题;
  • #523gen: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 文件内容如下:

  1. <?php
  2. use Hyperf\Di\Container;
  3. use Hyperf\Di\Definition\DefinitionSourceFactory;
  4. use Hyperf\Utils\ApplicationContext;
  5. $container = new Container((new DefinitionSourceFactory(true))());
  6. if (! $container instanceof \Psr\Container\ContainerInterface) {
  7. throw new RuntimeException('The dependency injection container is invalid.');
  8. }
  9. return ApplicationContext::setContainer($container);
  • #486 Hyperf\HttpMessage\Server\RequestgetParsedBody 方法现在可以直接处理 JSON 格式的数据了;
  • #523 调整 gen:model 命令生成的模型类名默认为单数,如果表名为复数,则默认生成的类名为单数;
  • #614 #617 调整了 ConfigProvider 类的结构, 同时将 config/dependencies.php 文件移动到了 config/autoload/dependencies.php 内,且文件结构去除了 dependencies 层,此后也意味着您也可以将 dependencies 配置写到 config/config.php 文件内;

Config Provider 内数据结构的变化:之前:

  1. 'scan' => [
  2. 'paths' => [
  3. __DIR__,
  4. ],
  5. 'collectors' => [],
  6. ],

现在:

  1. 'annotations' => [
  2. 'scan' => [
  3. 'paths' => [
  4. __DIR__,
  5. ],
  6. 'collectors' => [],
  7. ],
  8. ],

增加了一层 annotations,这样将与配置文件结构一致,不再特殊

  • #630 变更了 Hyperf\HttpServer\CoreMiddleware 类的实例化方式,使用 make() 来替代了 new
  • #631 变更了 AMQP Consumer 的实例化方式,使用 make() 来替代了 new
  • #637 调整了Hyperf\Contract\OnMessageInterfaceHyperf\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\Concurrenttimeout 参数;
  • #612 移除了 RingPHP Handler 里没有使用到的 $url 变量;
  • #616 #618 移除了 Guzzle 里一些无用的代码;

优化

  • #644 优化了注解扫描的流程,分开 appvendor 两部分来扫描注解,大大减少了用户的扫描耗时;
  • #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 可以实现一个代码块内限制同时最多运行的协程数量;

变更

  • #583BaseClient::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\SwooleIOreadwrite 方法,减少不必要的重试;
  • #559 优化 Hyperf\HttpServer\Response::redirect() 方法,自动识别链接首位是否为斜杠并合理修正参数;
  • #560 优化 Hyperf\WebSocketServer\CoreMiddleware,移除了不必要的代码;

移除

  • #545 移除了 Hyperf\Database\Model\SoftDeletes 内无用的 restoringrestored 静态方法;

即将移除

  • #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 算法的变体算法;
  • #525Hyperf\HttpServer\Contract\ResponseInterface 增加一个 download() 方法,提供便捷的下载响应返回;

变更

  • #482 生成模型文件时,当设置了 refresh-fillable 选项时重新生成模型的 fillable 属性,同时该命令的默认情况下将不会再覆盖生成 fillable 属性;
  • #501Mapping 注解的 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 增加标准错误码;
  • #450Hyperf\Database\Schema\Schema 类的魔术方法增加对应的静态方法注释,为 IDE 提供代码提醒的支持;

变更

  • #451 在使用 @AutoController 注解时不再会自动为魔术方法生成对应的路由;
  • #468 让 GRPC-Server 和 HTTP-Server 提供的异常处理器处理所有的异常,而不只是 ServerException

修复

  • #466 修复分页时数据不足时返回类型错误的问题;
  • #466 优化了 vendor:publish 命令,当要生成的目标文件夹存在时,不再重复生成;

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\OnStartHyperf\Framework\Event\OnManagerStart 事件;

修复

  • #361 修复 db:model命令在 MySQL 8 下不能正常运行;
  • #369 修复实现 \Serializable 接口的自定义异常类不能正确的序列化和反序列化问题;
  • #384 修复用户自定义的 ExceptionHandler 在 JSON RPC Server 下无法正常工作的问题,因为框架默认自动处理了对应的异常;
  • #370 修复了 Hyperf\GrpcClient\BaseClient$client 属性在流式传输的时候设置了错误的类型的值的问题, 同时增加了默认的 content-typeapplication/grpc+proto,以及允许用户通过自定义 Request 对象来重写 buildRequest() 方法;

变更

  • #356 #390 优化 aysnc-queue 组件当生成 Job 时,如果 Job 实现了 Hyperf\Contract\CompressInterface,那么 Job 对象会被压缩为一个更小的对象;
  • #358 只有当 $enableCachetrue 时才生成注解缓存文件;
  • #359 #390CollectionModel 增加压缩能力,当类实现 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 #348hyperf/cache 缓存组件增加文件驱动;

变更

  • #330 当扫描的 $paths 为空时,不输出扫描信息;
  • #328 根据 Composer 的 PSR-4 定义的规则加载业务项目;
  • #329 优化 JSON RPC 服务端和客户端的异常消息处理;
  • #340make 函数增加索引数组的传参方式;
  • #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

新增

  • #317 增加 composer-json-fixer 来优化 composer.json 文件的内容;
  • #320 DI 定义 Definition 时,允许 value 为一个匿名函数;

修复

  • #300 让 AsyncQueue 的消息于子协程内来进行处理,修复 attempts 参数与实际重试次数不一致的问题;
  • #305 修复 Hyperf\Utils\Arr::set 方法的 $key 参数不支持 intnull 的问题;
  • #312 修复 Hyperf\Amqp\BeforeMainServerStartListener 监听器的优先级错误的问题;
  • #315 修复 ETCD 配置中心在 Worker 进程重启后或在自定义进程内无法使用问题;
  • #318 修复服务会持续注册到服务中心的问题;

变更

  • #323 强制转换 CacheableCachePut 注解的 $ttl 属性为 int 类型;

v1.0.8 - 2019-07-31

新增

  • #276 AMQP 消费者支持配置及绑定多个 routing_key
  • #277 增加 ETCD 客户端组件及 ETCD 配置中心组件;

变更

  • #297 如果服务注册失败,会于 10 秒后重试注册,且屏蔽了连接不上服务中心(Consul)而抛出的异常;
  • #298 #301 适配 openzipkin/zipkin v1.3.3+ 版本;

修复

  • #271 修复了 AOP 在 classes 只会策略下配置同一个类的多个方法只会实现第一个方法的代理方法的问题;
  • #285 修复了 AOP 在匿名类下生成节点存在丢失的问题;
  • #286 自动 rollback 没有 commitrollback 的 MySQL 连接;
  • #292 修复了 Request::header 方法的 $default 参数无效的问题;
  • #293 修复了 Arr::get 方法的 $key 参数不支持 int and null 传值的问题;

v1.0.7 - 2019-07-26

修复

  • #266 修复投递 AMQP 消息时的超时逻辑;
  • #273 修复当有一个服务注册到服务中心的时候所有服务会被移除的问题;
  • #274 修复视图响应的 Content-Type ;

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 协议下的服务注册及健康检查;

变更

  • #247 使用 WorkerStrategy 作为默认的计划任务调度策略;
  • #256 优化 JSON RPC 的错误处理,现在当方法不存在时也会返回一个标准的 JSON RPC 错误对象;

修复

  • #235grpc-server 增加了默认的错误处理器,防止错误抛出.
  • #240 优化了 OnPipeMessage 事件的触发,修复会被多个监听器获取错误数据的问题;
  • #257 修复了在某些环境下无法获得内网 IP 的问题;

v1.0.5 - 2019-07-17

新增

  • #185 响应(Response) 增加 xml 格式支持;
  • #202 在协程内抛出未捕获的异常时,默认输出异常的 trace 信息;
  • #138 #197 增加秒级定时任务组件;

变更

  • #195 变更 retry() 函数的 $times 参数的行为意义, 表示重试的次数而不是执行的次数;
  • #198 优化 Hyperf\Di\Containerhas() 方法, 当传递一个不可实例化的示例(如接口)至 $container->has($interface) 方法时,会返回 false
  • #199 当生产 AMQP 消息失败时,会自动重试一次;
  • #200 通过 Git 打包项目的部署包时,不再包含 tests 文件夹;

修复

  • #176 修复 LengthAwarePaginator::nextPageUrl() 方法返回值的类型约束;
  • #188 修复 Guzzle Client 的代理设置不生效的问题;
  • #211 修复 RPC Client 存在多个时会被最后一个覆盖的问题;
  • #212 修复 Guzzle Client 的 ssl_keycert 配置项不能正常工作的问题;

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 and hyperf/dispatcher 组件对 hyperf/framework 组件的依赖

修复

  • #45 修复当引用了 hyperf/websocket-server 组件时有可能会导致 HTTP Server 启动失败的问题
  • #55 修复方法级别的 @Middleware 注解可能会被覆盖的问题
  • #73 修复 db:model 命令对短属性处理不正确的问题
  • #88 修复当控制器存在多层文件夹时生成的路由可能不正确的问题
  • #101 修复常量不存在 @Message 注解时会报错的问题

v1.0.2 - 2019-06-25

新增

  • 接入 Travis CI,目前 Hyperf 共存在 426 个单测,1124 个断言; #25
  • 完善了对 Redis::connect 方法的参数支持; #29

修复

  • 修复了 HTTP Server 会被 WebSocket Server 影响的问题(WebSocket Server 尚未发布);
  • 修复了代理类部分注解没有生成的问题;
  • 修复了数据库连接池在单测环境下会无法获取连接的问题;
  • 修复了 co-phpunit 在某些情况下不能按预期运行的问题;
  • 修复了模型事件 creating, updating … 运行与预期不一致的问题;
  • 修复了 flushContext 方法在单测环境下不能按预期运行的问题;