orbiter/middleware-utils

Middleware Utils with PHP-DI,通用PSR-7/17,15 Middlewares

0.1.0 2020-01-05 20:29 UTC

This package is auto-updated.

Last update: 2024-09-06 06:58:13 UTC


README

PSR-7/17和PSR-15中间件系统的工具和中间件,用于与PHP-DI一起使用。

HasResponseFactory

向中间件添加响应工厂,具有多种工厂方法,依赖于Psr\Http\Message\ResponseFactoryInterfacePsr\Http\Message\StreamFactoryInterface的DI注入。

<?php
use Orbiter\MiddlewareUtils\HasResponseFactory;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class SampleMiddleware implements MiddlewareInterface {
    use HasResponseFactory;

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface {
        if($request->hasHeader('error') === 'some-strange-bug') {
            // Simple Status Response
            return $this->create500();
            // Same like `create500`
            return $this->createResponse(500, 'Internal Server Error');
        }

        if($request->hasHeader('error') === 'client-error') {
            // Creating: 400 Bad Request with JSON Body
            return $this->respondJson($this->create400(), ['message' => 'client-error-msg']);
        }
        
        return $handler->handle($request);
    }
}
  • createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface - 创建任何空响应
  • respondJson(ResponseInterface $response, $data): ResponseInterface - 使用响应并添加头和数据
  • create400(): ResponseInterface - 错误请求
  • create401(): ResponseInterface - 未授权
  • create402(): ResponseInterface - 需要支付
  • create403(): ResponseInterface - 禁止
  • create404(): ResponseInterface - 未找到
  • create405(): ResponseInterface - 方法不允许
  • create409(): ResponseInterface - 冲突
  • create410(): ResponseInterface - 已删除
  • create413(): ResponseInterface - 负载过大
  • create415(): ResponseInterface - 不支持媒体类型
  • create440(): ResponseInterface - 登录超时
  • create500(): ResponseInterface - 服务器内部错误
  • create501(): ResponseInterface - 未实现
  • create502(): ResponseInterface - 网关错误
  • create503(): ResponseInterface - 服务器不可用

ApiError

统一的错误体

<?php
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

use Orbiter\MiddlewareUtils\HasResponseFactory;
use Orbiter\MiddlewareUtils\ApiError;

class SampleMiddleware implements MiddlewareInterface {
    use HasResponseFactory;

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface {
        if($request->hasHeader('error') === 'user-not-found') {
            // Creating: 400 Bad Request with ApiError as JSON Body
            return $this->respondJson($this->create404(), new ApiError('User Not Found'));
        }
        
        return $handler->handle($request);
    }
}

CorsMiddleware

简单的CORS中间件,支持多个源。

使用任何DI工厂创建中间件,添加到任何中间件管道中。

<?php
use Orbiter\MiddlewareUtils\CorsMiddleware;

$pipe = new RespondPipe();

/**
 * @var DI\FactoryInterface $factory
 */
$pipe->with(
    $factory->make(CorsMiddleware::class, [
        'origins_allowed' => [
            'http://localhost:3000',
            'https://admin.example.org',
        ],
        'headers_allowed' => [
            'Content-Type',
            'Accept',
            'AUTHORIZATION',
            'X-Requested-With',
            'X_AUTH_TOKEN',
            'X_AUTH_SIGNATURE',
            'X_API_OPTION',
            'remember-me',
        ],
        'headers_expose' => [
            'Content-Range',
        ],
        'max_age' => 2,
    ])
);

CORSMiddleware Zend-Expressive

<?php
use Zend\Stratigility\MiddlewarePipe;

use DI\FactoryInterface;
use Orbiter\MiddlewareUtils\CorsMiddleware;

class PipelineFactory
{
    public function __invoke(FactoryInterface $factory)
    {
        $pipeline = new MiddlewarePipe();

        // create CORS Middleware with PHP-DI
        $pipeline->pipe($factory->make(CorsMiddleware::class, [
            'origins_allowed' => ['http://localhost:3000'],
            'headers_allowed' => [
                'Content-Type',
                'Accept',
                'AUTHORIZATION',
                'X-Requested-With',
                'X_AUTH_TOKEN',
                'X_AUTH_SIGNATURE',
                'X_API_OPTION',
                'remember-me',
            ],
            'headers_expose' => [
                'Content-Range',
            ],
            'max_age' => 2,
        ]));

        $pipeline->pipe(OtherMiddleware::class);
        // ...

        return $pipeline;
    }
}

许可证

本项目是免费软件,根据MIT许可证分发。

查看:LICENSE

贡献者

通过将代码提交到代码库,您同意在代码库附加的MIT许可证下发布代码。

Michael Becker维护