Peak/Http
Http stack represent a pipeline of middlewares designed to handle an http request and/or return a reponse.
To work properly, a stack will need a HandlerResolver with a container which may have PSR-11 container to resolve middlewares.
use Peak\Di\Container;
use Peak\Http\Request\HandlerResolver;
use Peak\Http\Stack;
$container = new Container();
$handlerResolver = new HandlerResolver($container);
$stack = new Stack([
MiddlewareA::class,
], $handlerResolver);
Any PSR-15 middleware can be added to a stack. A stack itself can be added to a parent stack.
$stack = new Stack([
MiddlewareA::class,
new Stack([
MiddlewareC::class,
MiddlewareD::class,
new Stack([
MiddlewareE::class,
MiddlewareF::class,
], $handlerResolver),
], $handlerResolver),
MiddlewareB::class,
], $handlerResolver);
It also support simple closure but behind the scene, closure are bridged to a valid Psr\Http\Server\MiddlewareInterface
$stack = new Stack([
MiddlewareA::class,
function(ServerRequestInterface $req, RequestHandlerInterface $next) {
// do something with the request and call next
return $next->handle($req);
},
function() {
return new TextResponse('Ok', 200);
},
], $handlerResolver);
Resolve a http request compatible PSR-7 ServerRequestInterface
with the method handle()
$response = $stack->handle($request);