Lumen 5.4 中的请求对象变更
发布于 作者 Mohamed Said
几周前,Lumen 核心团队成功修复了在单元测试中调用请求对象时出现的一个问题。在修复之前,请求对象似乎为空,所有输入数据在单元测试中都不存在。
问题与 Lumen 的启动方式有关。简单来说,请求对象在启动顺序中过早地被实例化为一个单例。在单元测试中创建请求无法修改请求对象,因为它已经被实例化为一个单例,这就是我们在单元测试中无法重建它的原因。
为了解决这个问题,我们将创建请求实例的步骤推迟到应用程序开始将请求分派到路由器时,这与 Laravel 在启动时采取的方法相同。
这种更改带来的问题是,Lumen 用户将无法再在服务提供者中使用请求实例。这是因为在 Lumen 注册提供者时,请求对象尚未被实例化。
另一种解决方案是将您在服务提供者中放置的任何使用请求对象的代码复制到全局中间件中。中间件将在捕获请求后立即运行。