Skip to content

fastdlabs/middleware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FastD Middleware

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

About

FastD Middleware

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages