Skip to content

Releases: zhamao-robot/zhamao-framework

2.5.7 (build 425)

03 Nov 15:28
Compare
Choose a tag to compare
  • 调低 OneBot 相关事件在 Swoole 的优先级
  • 修复部分情况下闭包事件函数分发时引发的崩溃 bug
  • 修复 reload 时会断开 WebSocket 连接且导致进程崩溃的 bug

2.5.6 (build 423)

17 Oct 15:55
Compare
Choose a tag to compare
  • 修复 PHP 7.2 ~ 7.3 下无法使用新版 MySQL 组件的 bug

2.5.5 (build 422)

06 Oct 10:10
Compare
Choose a tag to compare
  • 修复 script_ 前缀无法被排除加载模块的 bug
  • 修复 MySQL 组件的依赖问题

2.5.4 (build 421)

11 Sep 08:27
Compare
Choose a tag to compare
  • 删除多余的调试信息

2.5.3 (build 420)

11 Sep 04:01
Compare
Choose a tag to compare
  • 修复 DB 模块在未连接数据库的时候抛出未知异常
  • 修复部分情况下打包模块出现的错误
  • 修复 OneBot 事件无法响应的 bug
  • 新增部分 EventDispatcher 触发的事件 debug 日志

2.5.2 (build 418)

10 Sep 03:33
Compare
Choose a tag to compare
  • 新增 AnnotationException,统一框架内部的抛出异常的类型
  • 新增 AnnotationParser 下的 verifyMiddlewares() 方法
  • 私有化 CQAPI 类下的内部方法
  • 将 WebSocket API 响应超时时间从 60 秒缩短为 30 秒
  • 修复 DB 类不能使用旧查询器的 bug
  • 统一 DB 类下抛出 Exception 的类型为 ZMException 的子类
  • EventDispatcher 新增对 middleware_error_policy 的处理段
  • 配置文件下 runtime 新增 middleware_error_policy 字段
  • 将 LightCache 组件抛出的异常改为 LightCacheException
  • ModuleManager 修复改配置的 load_path 不生效的 bug
  • 修复打包时生成的 Phar Autoload 列表出错的 bug
  • 将配置的 override 改为 overwrite
  • 新增解包时忽略依赖的选项(--ignore-depends
  • 删除众多调试日志,修改部分调试日志为 debug 级别的输出
  • 修改 ZM\MySQL\MySQLManager 下的 getConnection()getWrapper()
  • MySQLPool 对象新增 getCount() 方法
  • 新增 MySQLQueryBuilder 类(doctrine/dbal 的 wrapper 类)
  • 修复 MySQLStatement 封装原 dbal 组件时与连接池不兼容的 bug
  • 新增 MySQLStatementWrapper 类
  • 完善 MySQLWrapper 类,用作主要的查询对象控制类
  • 编写外部插件加载方式(Phar 热加载功能)
  • 修复 ZMUtil::getClassesPsr4() 方法在遇到空扩展名文件时的报错

2.5.1 (build 416)

09 Jul 05:00
Compare
Choose a tag to compare
  • 修复:脚手架无法正常使用 init 命令的 bug。

2.5.0 (build 415)

09 Jul 02:44
Compare
Choose a tag to compare

以下是版本新增内容

  • 新增全新的模块系统,可打包模块(src 目录下的子目录用户逻辑代码)为 phar 格式进行分发和版本备份。
  • 全局配置文件新增 module_loader 项,用于配置外部模块加载的一些设置。
  • 全局配置文件新增 runtime 配置项,可自定义配置 Swoole 的一些运行时参数,目前可配置一键协程化的 Hook 参数和 Swoole Server 的启动模式。
  • 新增 module:list 命令,用于查看未打包和已打包的模块列表。
  • 新增 module:pack 命令,用于打包现有 src 目录下的模块。
  • 新增 module:unpack 命令,用于解包现有的 phar 模块包。
  • 新增打包框架功能,支持将用户的整个项目连同炸毛框架打包为一个 phar 便携运行,使用命令 build
  • 新增快捷脚本 ./zhamao,效果同 vendor/bin/startbin/start
  • 新增启动参数 --interact:又重新支持交互终端了,但还是有点问题,不推荐使用。
  • 新增启动参数 --disable-safe-exit:如果你的项目在 Ctrl+C 时总是卡住且项目内没有什么使用 LightCache 等缓存在内存的数据可开启防止关不掉框架。
  • 新增启动参数 --preview:只显示参数,不启动炸毛框架的服务器。
  • 新增启动参数 --force-load-module:强制打包状态下加载的模块(使用英文逗号分隔多个模块名称)。
  • CoroutinePool 协程池新增 getRunningCoroutineCount 方法,用于查看协程池中的协程数量。
  • DataProvider 新增 getFrameworkRootDir()getSourceRootDir(),分别代表获取框架的根目录和用户源码根目录。(详见下方对目录的定义解释)
  • DataProvidergetDataFolder 新增参数 $second = '',如果给定,则自动创建子目录 $second 并返回。
  • DataProvider 新增 scanDirFiles() 方法,用于扫描目录,可选择是否递归、是否返回相对路径,也支持扫描 Phar 文件内的路径,非常好用。
  • DataProvider 新增 isRelativePath() 方法,检查路径是否为相对路径(根据第一个字符是否是 '/' 来判断)。
  • ZMUtil 新增 getClassesPsr4() 方法,用于根据 Psr-4 标准来获取目录下的所有类文件。
  • 新增全局错误码,可以根据错误码在文档内快速定位和解决问题。
  • 中间件和注解事件支持回溯,可以快速查看调用栈(比如中间件可以知道自己是在哪个注解事件中被调用)。
  • 使用 ./zhamao build 来构建框架的 phar 包时增加显示进度条。
  • EventDispatcher 新增方法 getEid()getClass(),分别用于获取事件分发 ID 和注解事件的注解类名称。
  • 新增 EventTracer,用于追踪事件的调用栈。
  • 中间件支持传参。
  • MySQL 数据库查询器改为使用 doctrine/dbal 组件,更灵活和稳定。
  • 新增对 SWOOLE_BASE 模式的支持(支持只启动一个进程的 Server)。

以下是版本修改内容

  • 启动文件 vendor/bin/start 修改为 shell 脚本,可自动寻找 PHP 环境。
  • 全局强制依赖 league/climate 组件。
  • 修复框架启动时的信息显示换行问题。
  • 修复框架使用 Phar 方式启动时导致的报错。
  • 修复使用 Ctrl+C 结束时一部分用户卡住的 bug。
  • 远程和本地终端去掉 stop 命令,建议直接使用发 SIGTERM 方式结束框架。
  • 全局配置文件的 zm_data 根目录默认修改为 WORKING_DIR
  • 命令 systemd:generate 修改为 generate:systemd
  • 全局配置文件删除 server_event_handler_class 项,此项废弃。
  • 修复部分 CQ 码解析过程中没有转义的问题。
  • ZMRobot 类转移为 OneBotV11 类,但提供兼容。
  • 修复在守护进程模式下使用 daemon:reloaddaemon:stop 命令可能失效的问题。
  • 修复 systemd 生成时脚本目录错误的 bug。
  • 修复 PipeMessage 等事件未捕获错误导致崩溃的问题。
  • ZM\Http\RouteManager 移动到 ZM\Utils\Manager\RouteManager,但原地址兼容。
  • 修复 Terminal 类使用的一些问题。
  • pcntl 扩展改为可选依赖,当 Swoole 版本大于等于 4.6.7 时不需要安装 pcntl 扩展。
  • 修正启动时框架对缺省配置项的一些默认参数。
  • 注解 @OnSetup@SwooleHandler 可直接使用,无需设置 server_event_handler_class 即可。
  • 修复框架在一些非正常终端中运行时导致错误的问题。
  • 使用 --debug-mode 参数时,自动开启热更新。
  • 修复脚手架在使用 composer 更新后检查全局配置功能的 bug。
  • 修复重启和关闭框架时造成的非正常连接断开。
  • 改用独立进程监听文件变化和终端输入。
  • 修复有协程中断的任务时停止服务器会报 Swoole 警告的 bug。
  • 修复连接被反复断开的问题。

对目录的定义解释

在 2.4.4 版本之前,使用炸毛框架中,只含有两种目录,getWorkingDirgetDataFolder,分别代表获取工作目录和数据目录。在 2.5 版本中,又新增了 getFrameworkRootDir 代表获取框架的根目录,getSourceRootDir 代表获取源码的根目录。

以 Composer 运行模式举例,如果你使用 composer create-project zhamao/framework-starter 命令新建的框架,那么假设我们从 /app 目录下运行此命令,然后使用 cd framework-starter/ 进入项目目录,此时我们使用 vendor/bin/start server 命令运行服务器,对应的目录为:

  • WorkingDir/app/framework-starter/
  • SourceRootDir/app/framework-starter/
  • FrameworkRootDir/app/framework-starter/vendor/zhamao/framework/

如果以源码模式(直接克隆 zhamao-framework.git 仓库),启动框架,那么使用命令 bin/start server 启动框架后,以上三个返回的目录则完全相同。

如果以 2.5 版本新的项目归档模式(build)启动框架,假设我们的项目代码打包为 server.phar,在 /app/ 目录,我们使用命令 php server.phar server 启动炸毛框架,那么它对应的目录为:

  • WorkingDir/app/
  • SourceRootDirphar:///app/server.phar/
  • FrameworkRootDirphar:///app/server.phar/vendor/zhamao/framework/

如果最后一种归档方式启动的框架是从源码模式打包而来,那么 FrameworkRootDir 就与 SourceRootDir 相同。

版本部分兼容问题变化

理论上如果不使用框架内部未开放的接口方法的话,从 2.4 升级到 2.5 是非常自然的,但是也有一部分可能会造成不兼容的问题。

  • 生成 systemd 配置文件的命令 systemd:generate 变成 generate:systemd
  • 全局配置文件中的 zm_data 的父目录由 __DIR__ . "/../" 改为 WORKING_DIR
  • 2.5 版本将 ZMRobot 类中的所有函数方法都移动到了 OneBotV11 类中,但原先的 ZMRobot 还可以使用。

2.5.0-beta1 (build 408)

15 Jun 16:23
Compare
Choose a tag to compare
Pre-release

注意:此版本为测试版,供开放测试一些新增较多内容的部分,请勿用于生产环境!

2.4.4 (build 405)

29 Mar 09:18
Compare
Choose a tag to compare

以下是可能不兼容的变更:

  • 新增依赖:框架需要 PHP 安装 pcntl 扩展以及开启 pcntl_signal 函数(一般情况下编译安装的都会有,宝塔面板请手动解除函数禁用)