admin PSR-15 是 PHP-FIG(PHP Framework Interop Group)制定的 HTTP 服务器请求处理接口标准,旨在规范中间件(Middleware)和请求处理器(Request Handler)的实现,提升不同框架和库之间的互操作性。以下是其核心内容: 一、核心接口定义 MiddlewareInterface 中间件必须实现此接口,核心方法为 process(): public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface 作用:接收请求对象(ServerRequestInterface)和请求处理器(RequestHandlerInterface),处理请求后返回响应对象(ResponseInterface)。 流程:可在请求传递给下一层处理器前或响应返回前执行逻辑(如认证、日志记录)。 RequestHandlerInterface 请求处理器需实现此接口,核心方法为 handle(): public function handle(ServerRequestInterface $request): ResponseInterface 作用:作为请求处理的最终执行单元,生成响应。 --- 二、中间件执行流程(洋葱模型) 请求阶段:中间件按栈顺序处理请求,逐层传递至核心处理器。 响应阶段:响应按相反顺序逐层返回,每层中间件可修改响应内容。 优势:通过解耦逻辑(如认证、CORS、错误处理),提升代码可维护性和复用性。 --- 三、标准化价值 互操作性 遵循 PSR-15 的中间件可在不同框架(如 Laravel、Slim)中无缝集成。 解耦与扩展性 业务逻辑被拆分为独立中间件,支持动态组合(如添加/移除认证层)。 测试友好 每个中间件可独立测试,简化单元测试流程。 --- 四、典型应用场景 | 场景 | 实现示例 | |------------------|-----------------------------------------------------------------------------| | 身份认证 | 验证用户权限,未授权时拦截请求 | | 日志记录 | 记录请求详情(如 IP、路径)用于调试 | | CORS 处理 | 添加跨域响应头,支持前端跨域请求 | | 文件上传 | 结合 PSR-7 处理 GraphQL 多部分请求(如 graphql-upload 中间件) | | 错误处理 | 捕获异常并返回标准化错误响应(如 RFC 7807 格式) | --- 五、实现示例 以下是一个基础中间件实现: use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; class AuthMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // 检查用户认证状态 if (!$this->isAuthenticated($request)) { return new Response(401); // 返回未授权响应 } return $handler->handle($request); // 传递至下一层 } } 通过中间件栈(MiddlewareStack)按序注册多个中间件,实现请求管道。 --- 六、相关资源 开源中间件库: awesome-psr15-middlewares:精选中间件集合(如路由、内容协商) whoops-middleware:集成 Whoops 的错误处理中间件 Laravel 集成: laravel-psr15-middleware 包支持在 Laravel 中使用 PSR-15 中间件。 PSR-15 通过标准化接口和执行流程,为 PHP 中间件开发提供了统一规范,显著提升了代码的复用性和生态协作效率。开发者可基于此规范构建灵活、可扩展的 HTTP 处理管道。