thecodingmachine / middleware-list-universal-module
提供包含中间件列表服务的跨框架模块
v1.1.1
2018-06-05 13:27 UTC
Requires
- php: >=7.0
- container-interop/service-provider: ~0.4.0
README
此包为任何与container-interop兼容的框架/容器提供了一个http-interop中间件列表。中间件列表是空的。任何包都可以添加中间件到列表中。
安装
此包通常由提供中间件的包使用。
composer require thecodingmachine/middleware-list-universal-module
如果您的容器支持通过codingmachine/discovery自动发现,则无需做更多操作。否则,您需要将TheCodingMachine\MiddlewareListServiceProvider
注册到您的容器中。
参考您的框架或容器文档以了解如何注册服务提供者。
使用
中间件队列注册在键MiddlewareListServiceProvider::MIDDLEWARES_QUEUE
下。这是一个\SPLPriorityQueue
。
根据您要注册的中间件,您通常对它相对于其他中间件的运行顺序有一个相当好的了解。
让我们将中间件分为4个类别
- 工具中间件:这些通常在请求开始时处理。它们用于修改/丰富响应并将其传递给其他中间件。在这个类别中,您可以将计算响应时间、添加地理位置信息、管理会话等的中间件放入。
- 路由器:这些中间件通常用于处理请求并返回响应。它们对特定的路由做出响应,或者在不知道该路由时将请求传递给下一个路由器。
- 404页面未找到路由器:这些中间件负责在没有任何中间件处理请求时返回404响应。这是队列中的最后一个“经典”中间件。
- 错误处理中间件:最后,在队列的最后,您将找到处理错误和异常的中间件列表。它们负责记录或显示错误消息。
基于这4个类别,MiddlewareListServiceProvider
提供了一个SPL优先队列,可以用来在队列的适当位置注册任何中间件。
服务提供者定义了12个常量,您可以使用这些常量在给定的位置插入中间件
MiddlewareOrder::EXCEPTION_EARLY
(3050)MiddlewareOrder::EXCEPTION
(3000)MiddlewareOrder::EXCEPTION_LATE
(2950)MiddlewareOrder::UTILITY_EARLY
(2050)MiddlewareOrder::UTILITY
(2000)MiddlewareOrder::UTILITY_LATE
(1950)MiddlewareOrder::ROUTER_EARLY
(1050)MiddlewareOrder::ROUTER
(1000)MiddlewareOrder::ROUTER_LATE
(950)MiddlewareOrder::PAGE_NOT_FOUND_EARLY
(50)MiddlewareOrder::PAGE_NOT_FOUND
(0)MiddlewareOrder::PAGE_NOT_FOUND_LATE
(-50)
每个“类别”有3个变体:EARLY、NORMAL和LATE,因此如果您想要在需要的情况下对工具进行更精细的调整,您可以添加。
因此,如果您想注册一个中间件,您通常会写
$middlewareQueue = $container->get(MiddlewareListServiceProvider::MIDDLEWARES_QUEUE); /* @var $middlewareQueue \SplPriorityQueue */ $middlewareQueue->insert($myMiddleware, MiddlewareOrder::UTILITY);