alexpts/php-simple-middlewares
最新稳定版本:1.1.0
Composer 安装命令:
composer require alexpts/php-simple-middlewares
包简介
Simple middlewares manager compatible with the PSR-7
关键字:
README 文档
README
New PSR-15 compatible middleware manager
(deprecated) Simple middlewares compatible with the PSR-7
MiddlewaresManager позволяет настраивать очередь выполнения программного обеспечения промежуточного уровня.
Каждый middleware принимает на вход объект запроса $request, при желании может что-то сделать с ним или создать новый объект $request и передать его в следующий middleware, ожидая от него объект response. Затем он может что-то сделать с объектом response или просто передать его пердыдущему middleware.
Milddleware, может не вызывать следующий middleware, а вернуть результат в ранее вызванный middleware.
Т.е. каждый middleware получает управление 2 раза. В момент прохода объекта $request и в момент возврата $response обратно
Для обеспечения гибкости и встраивомости компонента, middleware обработчкичи не ограничены никаким интерфейсом. Обработчиком может быть любой callable тип, которому будет передано 2 параметра ServerRequestInterface $request, callable $next. Для более формальной разработки каждый обработчик может поддерживать формальный интерфейс MiddlewareInterface.
Возвращаемый тип объекта $response также никак не ограничен. Вы можете вернуть из обработчика любой тип, например массив или объект типа ResponseInterface (psr-7). Формально ограничить на свой выбор вы можете указав тип возвращаемого значения в php 7.
Installation
$ composer require alexpts/php-simple-middlewares
Примеры
Произвольный обработчик
use Psr\Http\Message\ServerRequestInterface; use PTS\Middleware\MiddlewareManager; $middlewareManager = new MiddlewareManager(); $middlewareManager->push(function($request, $next){ /* optionally modify the request */ $request = $request->...; /* optionally skip the $next middleware and return early */ if (...) { return $response; } /* optionally invoke the $next middleware and get back a new response */ $response = $next($request); /* optionally modify the Response if desired */ $response = $response->...; return $response; });
Несолько MiddlewareInterface обработчиков
use Psr\Http\Message\ServerRequestInterface; use PTS\Middleware\MiddlewareManager; use PTS\Middleware\MiddlewareInterface; class MiddlewareA implements MiddlewareInterface { public function __invoke(ServerRequestInterface $request, callable $next) { $method = $request->getMethod(); if (method !== 'GET') { return new JsonResponse(['status' => 405], 405); } $response = $next($request); /* optionally modify the Response if desired */ $response = $response->...; return $response; } } class FrontController implements MiddlewareInterface { public function __invoke(ServerRequestInterface $request, callable $next) { /* ... some work and create response */ return $response; } } $middlewareManager = new MiddlewareManager(); $middlewareManager->push(new MiddlewareA); $middlewareManager->push(new FrontController); /* ... PSR-7 $request */ $response = $middlewareManager($request);
Обработчики ошибок/исключений
Если рассматривать middleware как независимые приложения, то каждый обработчик должен вернуть PSR-7 ответ в случае ошибки/исключения. Такой ответ должен пройти всю цепочку middleware в обратном порядке.
$middlewareManager = new MiddlewareManager(); $middlewareManager->push(new MiddlewareA); $middlewareManager->push(new FrontController, function (\Throwable $ex) { return new JsonResponse(['error' => $ex->getMessage()], 500); }); $response = $middlewareManager($request);
统计信息
- 总下载量: 456
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-01-04