thecodingmachine/middleware-list-universal-module

提供包含中间件列表服务的跨框架模块

v1.1.1 2018-06-05 13:27 UTC

This package is auto-updated.

Last update: 2024-09-06 23:57:45 UTC


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);