🎍 Bamboo style PSR-7 middleware pipe using generators
composer require cormy/bamboo
use Cormy\Server\Bamboo;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
// create your bamboo stem nodes, aka middlewares
$nodes = [];
$nodes[] = function (ServerRequestInterface $request):\Generator {
// delegate $request to the next request handler, i.e. the middleware right below
$response = (yield $request);
return $response->withHeader('X-PoweredBy', 'Unicorns');
};
$nodes[] = function (ServerRequestInterface $request):\Generator {
// delegate $request to the next request handler, i.e. the $finalHandler below
$response = (yield $request);
return $response->withHeader('content-type', 'application/json; charset=utf-8');
};
// create the middleware pipe
$middlewarePipe = new Bamboo($nodes);
// create a handler for requests which reached the end of the pipe
$finalHandler = function (ServerRequestInterface $request):ResponseInterface {
return new \Zend\Diactoros\Response();
};
// and dispatch a request
$response = $middlewarePipe->dispatch(new \Zend\Diactoros\ServerRequest(), $finalHandler);
/**
* Bamboo style PSR-7 middleware pipe.
*
* @param (callable|MiddlewareInterface)[] $nodes the middlewares, which requests pass through
*/
public function __construct(array $nodes)
/**
* Process an incoming server request and return the response.
*
* @param ServerRequestInterface $request
* @param callable|RequestHandlerInterface $finalHandler
*
* @return ResponseInterface
*/
public function dispatch(ServerRequestInterface $request, callable $finalHandler):ResponseInterface
Inherited from MiddlewareInterface::__invoke
/**
* Process an incoming server request and return the response, optionally delegating
* to the next request handler.
*
* @param ServerRequestInterface $request
*
* @return Generator yields PSR `ServerRequestInterface` instances and returns a PSR `ResponseInterface` instance
*/
public function __invoke(ServerRequestInterface $request):Generator;
- Cormy\Server\Onion – Onion style PSR-7 middleware stack using generators
- Cormy\Server\MiddlewareDispatcher – Cormy PSR-7 server middleware dispatcher
- Cormy\Server\RequestHandlerInterface – Common interfaces for PSR-7 server request handlers
- Cormy\Server\MiddlewareInterface – Common interfaces for Cormy PSR-7 server middlewares
MIT © Michael Mayer