echo-fusion/middlewaremanager

一个中间件管理器实现了PSR-15和PSR-7

v1.0.1 2024-09-30 15:52 UTC

This package is auto-updated.

Last update: 2024-09-30 18:09:26 UTC


README

这是一个用于管理PHP应用程序中中间件的灵活包。它允许您创建一个中间件管道,其中中间件处理请求并将其传递给下一个,提供了一个干净且组织良好的方式来处理中间件逻辑。

此包符合PSR-1、PSR-2、PSR-7和PSR-15。

安装

通过Composer安装此包

composer require echo-fusion/middlewaremanager

要求

此版本支持以下PHP版本。

  • PHP 8.1
  • PHP 8.2
  • PHP 8.3

用法

以下是使用MiddlewareManager设置和运行中间件管道的步骤。

1. 定义处理器

在适当的目录中定义您的处理器,并将其中一个传递给中间件管理器以在管道末尾运行

use Psr\Http\Message\ResponseFactoryInterface
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

class MyMiddlewareHandler implements RequestHandlerInterface {
    public function __construct(private readonly ResponseFactoryInterface $responseFactory)
    {
    }

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        // write your code here
        
        return $this->responseFactory->createResponse();
    }
}

2. 定义中间件

在适当的目录中以单独的文件定义您的中间件

use EchoFusion\MiddlewareManager\MiddlewareManager;
use EchoFusion\MiddlewareManager\MiddlewarePipeline;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ServerRequestInterface;

class CoreMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // ex: manipulate request
        $request = $request->withAttribute('key','value');
        
        return $handler->handle($request);
    }
}

class OtherMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $response =  $handler->handle($request);
        
        // ex: manipulate response
        return $this->convertedResponse($response);
    }
}

3. 运行MiddlewareManager

要将中间件添加到管理器中,您有两种选择

  • 将中间件添加为“核心中间件”,它始终在之后添加的任何中间件之前运行。
  • 动态添加中间件(例如,用于添加特定路由的中间件很有用)。

以下是如何运行MiddlewareManager的示例

注意:不要忘记在您的容器中实例化以下注入的依赖项。

use Psr\Container\ContainerInterface;
use Psr\Http\Message\ServerRequestInterface;
use EchoFusion\MiddlewareManager\MiddlewarePipelineInterface;

function (ContainerInterface $container, ServerRequestInterface $request, MiddlewarePipelineInterface $pipeline) {

    // optional
    $coreMiddlewares = [
        CoreMiddleware::class,
    ];
    
    $middlewareManager = new MiddlewareManager(
        $container, 
        $pipeline, 
        $coreMiddlewares
    );
    
    // add or remove your necessary middlewares if you want
    $middlewareManager->add(OtherMiddleware::class);
    $middlewareManager->remove(OtherMiddleware::class);
    // ...
    
    // instantiate handler directly or get from container to resolve possible dependencies
    $handler = new MyMiddlewareHandler();
    
    $response = $middlewareManager->dispatch($request, $handler);
    
    echo $response;
}

测试

测试包括PHPUnit和PHPStan(第7级)。

$ composer test

致谢

Amir Shadanfar开发和维护。
LinkedIn上建立联系。

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。