fastd/middleware

Maintainers

Package info

github.com/fastdlabs/middleware

pkg:composer/fastd/middleware

Statistics

Installs: 18 671

Dependents: 5

Suggesters: 0

Stars: 3

Open Issues: 0

v8.0.0 2026-05-28 08:54 UTC

README

Build Status Support PSR15 Latest Stable Version Total Downloads License composer.lock

简介

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 包含以下核心组件:

  1. Dispatcher: 负责管理中间件栈,提供 push/pop/unshift/shift 操作方法,并执行中间件链
  2. Middleware: 抽象中间件基类,实现了 PSR-15 的 MiddlewareInterface 接口
  3. RequestHandler: 请求处理器,封装回调函数并实现 RequestHandlerInterface 接口
  4. CallbackMiddleware: 便捷中间件类,允许通过闭包创建中间件

中间件执行流程

  1. Dispatcher 使用 SplStack 存储中间件
  2. 通过递归解析中间件栈构建执行链
  3. 从栈底开始依次执行中间件
  4. 每个中间件可选择是否调用后续中间件
  5. 执行完成后清空中间件栈

中间件开发

创建自定义中间件类:

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