fastd / middleware
v8.0.0
2026-05-28 08:54 UTC
Requires
- php: >=8.2
- fastd/http: ^8.0
- psr/http-server-middleware: *
Requires (Dev)
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
README
简介
FastD Middleware 是一个实现了 PSR-15 HTTP 服务器中间件标准的轻量级中间件库。它基于 SplStack 实现了灵活的中间件栈管理,支持中间件的链式调用,适用于各种 PHP HTTP 应用程序。
环境依赖说明
- PHP >= 8.2
- PSR-7 HTTP 消息接口实现
- PSR-15 HTTP 服务器中间件标准
基础使用说明
安装
composer require "fastd/middleware" -vvv
基本用法
use FastD\Middleware\Dispatcher; use FastD\Middleware\Middleware; use FastD\Http\Request\ServerRequest; use FastD\Http\Response\Text as Response; // 创建一个中间件类 class ExampleMiddleware extends Middleware { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // 在请求处理前执行的逻辑 $response = $handler->handle($request); // 在请求处理后执行的逻辑 return $response; } } // 创建最终处理器 class FinalHandler extends Middleware { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { return (new Response())->withContents("Final response"); } } // 创建调度器并添加中间件 $dispatcher = new Dispatcher(); $dispatcher->push(new FinalHandler()); $dispatcher->push(new ExampleMiddleware()); // 发起请求 $response = $dispatcher->dispatch(new ServerRequest('GET', '/'));
中间件栈操作
use FastD\Middleware\Dispatcher; $dispatcher = new Dispatcher(); // 添加中间件到栈顶 $dispatcher->push($middleware); // 从栈顶移除中间件 $dispatcher->pop(); // 添加中间件到栈底 $dispatcher->unshift($middleware); // 从栈底移除中间件 $dispatcher->shift(); // 执行中间件链 $response = $dispatcher->dispatch($serverRequest);
文档详细引导
核心组件
FastD Middleware 包含以下核心组件:
- Dispatcher: 负责管理中间件栈,提供 push/pop/unshift/shift 操作方法,并执行中间件链
- Middleware: 抽象中间件基类,实现了 PSR-15 的 MiddlewareInterface 接口
- RequestHandler: 请求处理器,封装回调函数并实现 RequestHandlerInterface 接口
- CallbackMiddleware: 便捷中间件类,允许通过闭包创建中间件
中间件执行流程
- Dispatcher 使用 SplStack 存储中间件
- 通过递归解析中间件栈构建执行链
- 从栈底开始依次执行中间件
- 每个中间件可选择是否调用后续中间件
- 执行完成后清空中间件栈
中间件开发
创建自定义中间件类:
use FastD\Middleware\Middleware; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use Psr\Http\Message\ResponseInterface; class CustomMiddleware extends Middleware { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // 在请求处理前执行的逻辑 // 调用下一个中间件 $response = $handler->handle($request); // 在请求处理后执行的逻辑 return $response; } }
回调中间件
您可以使用 CallbackMiddleware 来快速创建中间件:
use FastD\Middleware\CallbackMiddleware; $middleware = new CallbackMiddleware(function ($request, $handler) { // 前置逻辑 $response = $handler->handle($request); // 后置逻辑 return $response; });
运行示例
我们提供了一个示例文件来演示中间件的使用方法:
php example.php
该示例展示了:
- 基本中间件使用
- 回调中间件使用
- 中间件栈操作
- 复杂中间件链
- 异常处理
贡献
欢迎对项目感兴趣、愿意参与其中的开发者共同打造更好的 PHP 生态。
如果你有兴趣参与开发,可以尝试以下方式:
- 在你的项目中使用,将遇到的问题 反馈。
- 提出更好的建议或功能需求。
License
MIT License