原文:https://laravel-news.com/request-object-changes-in-lumen-5-4

几个星期以前,lumen 的核心组修正了一个单元测试调用 request 对象的问题,修正之前,request 是空的而且所有的表单数据在单元测试中都无法获取到。

这个问题关系到 Lumen 是如何启动的,简单的说,request 被过早的在启动程序中作为单例实例化了。在单元测试中创建 request 将不能修改 request 对象,因为它已经作为单例实例化了,这就是为什么我们不能在单元测试重建它。

为了解决这个问题,我们延迟了 request 实例的创建,直到应用开始分发 request 到路由,这与 laravel 的启动流程一致。

修正了这个问题,lumen 的用户将不能在你的 Service Providers 的任何地方使用 request 实例。这是因为 Lumen 注册 providers 的时候,request 对象还没有被实例化。

可代替的解决办法是复制所有 Service Providers 中使用 request 对象的代码,移动到一个全局中间件中;这个中间件会在 获取了 request 之后直接运行。