orbiter / middleware-utils
Middleware Utils with PHP-DI,通用PSR-7/17,15 Middlewares
0.1.0
2020-01-05 20:29 UTC
Requires
- php: >=7.3
- ext-json: *
- php-di/php-di: 6.*
- psr/http-message: ^1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
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\ResponseFactoryInterface
和Psr\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许可证下发布代码。