for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Starch\Middleware;
use InvalidArgumentException;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class Stack
{
/**
* @var MiddlewareInterface[]
*/
private $middleware = [];
* @var RequestHandlerInterface
private $lastHandler;
public function __construct(array $middleware, RequestHandlerInterface $lastHandler)
array_walk($middleware, function(MiddlewareInterface $middleware) {
$this->middleware[] = $middleware;
});
$this->lastHandler = $lastHandler;
}
public function dispatch(ServerRequestInterface $request): ResponseInterface
$handler = $this->getNextHandler();
return $handler->handle($request);
private function getNextHandler(): RequestHandlerInterface
$middleware = array_shift($this->middleware);
if (null === $middleware) {
return $this->lastHandler;
return new NextHandler(function (ServerRequestInterface $request) use ($middleware) {
return $middleware->process($request, $this->getNextHandler());