Releases: zhamao-robot/zhamao-framework
2.5.7 (build 425)
- 调低 OneBot 相关事件在 Swoole 的优先级
- 修复部分情况下闭包事件函数分发时引发的崩溃 bug
- 修复 reload 时会断开 WebSocket 连接且导致进程崩溃的 bug
2.5.6 (build 423)
- 修复 PHP 7.2 ~ 7.3 下无法使用新版 MySQL 组件的 bug
2.5.5 (build 422)
- 修复
script_
前缀无法被排除加载模块的 bug - 修复 MySQL 组件的依赖问题
2.5.4 (build 421)
- 删除多余的调试信息
2.5.3 (build 420)
- 修复 DB 模块在未连接数据库的时候抛出未知异常
- 修复部分情况下打包模块出现的错误
- 修复 OneBot 事件无法响应的 bug
- 新增部分 EventDispatcher 触发的事件 debug 日志
2.5.2 (build 418)
- 新增 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)
- 修复:脚手架无法正常使用
init
命令的 bug。
2.5.0 (build 415)
以下是版本新增内容:
- 新增全新的模块系统,可打包模块(src 目录下的子目录用户逻辑代码)为 phar 格式进行分发和版本备份。
- 全局配置文件新增
module_loader
项,用于配置外部模块加载的一些设置。 - 全局配置文件新增
runtime
配置项,可自定义配置 Swoole 的一些运行时参数,目前可配置一键协程化的 Hook 参数和 Swoole Server 的启动模式。 - 新增
module:list
命令,用于查看未打包和已打包的模块列表。 - 新增
module:pack
命令,用于打包现有 src 目录下的模块。 - 新增
module:unpack
命令,用于解包现有的 phar 模块包。 - 新增打包框架功能,支持将用户的整个项目连同炸毛框架打包为一个 phar 便携运行,使用命令
build
。 - 新增快捷脚本
./zhamao
,效果同vendor/bin/start
或bin/start
。 - 新增启动参数
--interact
:又重新支持交互终端了,但还是有点问题,不推荐使用。 - 新增启动参数
--disable-safe-exit
:如果你的项目在 Ctrl+C 时总是卡住且项目内没有什么使用 LightCache 等缓存在内存的数据可开启防止关不掉框架。 - 新增启动参数
--preview
:只显示参数,不启动炸毛框架的服务器。 - 新增启动参数
--force-load-module
:强制打包状态下加载的模块(使用英文逗号分隔多个模块名称)。 CoroutinePool
协程池新增getRunningCoroutineCount
方法,用于查看协程池中的协程数量。DataProvider
新增getFrameworkRootDir()
、getSourceRootDir()
,分别代表获取框架的根目录和用户源码根目录。(详见下方对目录的定义解释)DataProvider
中getDataFolder
新增参数$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:reload
和daemon: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 版本之前,使用炸毛框架中,只含有两种目录,getWorkingDir
和 getDataFolder
,分别代表获取工作目录和数据目录。在 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/
SourceRootDir
:phar:///app/server.phar/
FrameworkRootDir
:phar:///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)
注意:此版本为测试版,供开放测试一些新增较多内容的部分,请勿用于生产环境!
2.4.4 (build 405)
以下是可能不兼容的变更:
- 新增依赖:框架需要 PHP 安装 pcntl 扩展以及开启
pcntl_signal
函数(一般情况下编译安装的都会有,宝塔面板请手动解除函数禁用)