FastD Middleware 是一个实现了 PSR-15 HTTP 服务器中间件标准的轻量级中间件库。它基于 SplStack 实现了灵活的中间件栈管理,支持中间件的链式调用,适用于各种 PHP HTTP 应用程序。
- PHP >= 8.2
- PSR-7 HTTP 消息接口实现
- PSR-15 HTTP 服务器中间件标准
composer require "fastd/middleware" -vvvuse 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 生态。
如果你有兴趣参与开发,可以尝试以下方式:
- 在你的项目中使用,将遇到的问题 反馈。
- 提出更好的建议或功能需求。
MIT License