Laravel 开发团队本周发布了 v6.14.0
版本,新增了 dispatchAfterResponse()
方法、在调度器(dispatcher)中支持宏方法、以及支持 NoMigrations
事件。
下面我们来看看一些重要的更新。
1、重要特性
响应后分发任务
调度器中新增了一个 dispatchAfterResponse()
方法,顾名思义,该方法用于在响应发送给客户端之后执行一个任务,对应的使用场景如下:
该方法用于在响应发送后、连接关闭前执行某个任务,其实现原理有点类似终止中间件,会在应用程序处理请求完成之前注册一个可运行的终止回调到应用。
有人可能会说同样的事情可以通过队列任务来完成,确实如此,不过对于一些简单的、非耗时的、需要立即执行的任务,通过这种方式处理更简单一些。
下面是一个简单的使用示例:
代码语言:javascript复制SomethingDispatchable::dispatchAfterResponse();
代码语言:javascript复制
断言空的任务链
QueueFake
类中新增了一个 assertPushedWithoutChain
方法,该方法可用于测试空的任务链:
Queue::fake();
Queue::assertPushedWithEmptyChain(ExampleJob::class);
代码语言:javascript复制
NoMigrations 事件
当没有任何数据库迁移执行时,现在可以触发一个 NoMigrations
事件,虽然通常我们可能并不会用到这个特性:
// 在迁移类的 up 方法中如何没有任何迁移任务,可以这样触发 NoMigrations 事件
$this->fireMigrationEvent(new NoMigrations('up'));
代码语言:javascript复制
以上就是本次版本发布的几个新功能,你可以在 Github 上查看完整的更新日志:https://github.com/laravel/framework/blob/d25d45b389aac2492e923a8adf885095474f8d2f/CHANGELOG-6.x.md#v6140-2020-02-04,还可以对比 6.13.0 和 6.14.0 的版本差异:https://github.com/laravel/framework/compare/v6.13.0...v6.14.0。
2、升级明细
下面我们来简单浏览下 6.14.0 版本的更新日志。
新增特性
- 新增
IlluminateBusDispatcher::dispatchAfterResponse()
方法 - 新增
IlluminateSupportTestingFakesQueueFake::assertPushedWithoutChain
方法 - 在
IlluminateEventsDispatcher
中使用Macroable
trait - 新增
NoPendingMigrations
事件
问题修复
- 使用当前 DB 实例创建 Doctrine 连接
- 在
vendor:publish
命令中发布标签时移除重复的输出 - 修复
pluck
方法参数包含空格的问题 - 修复事件调度器中通配符缓存的问题
- 修复
RedisStore
中的无限值问题 - 修复 SqlServer 中删除包含默认值的列的问题
代码调整
- 在 mysql 8.1 和 pgsql 9.5 的队列工作者中使用 SKIP LOCKED
- 在
IlluminateBusQueueable::middleware()
中没有合并方法和属性中的中间件 - 从
IlluminateConsoleCommand
中分离specifyParameter()
方法到HasParameters
trait - 确保将数据库字段更改为 JSON 格式不包含字符集
声明:本文翻译整理自 Laravel News。