Cormy GreenOnion PSR-7+PSR-15 middleware stack.
💣 EXPERIMENTAL – Work in Progress 💣
💣 EXPERIMENTAL – support fore PSR-15 Middlewares 💣
composer require cormy/green-onion
use Cormy\Server\GreenOnion;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Interop\Http\Middleware\DelegateInterface;
use Interop\Http\Middleware\ServerMiddlewareInterface;
// create the core of the onion, i.e. the innermost request handler
$core = function (ServerRequestInterface $request) : ResponseInterface {
return new \Zend\Diactoros\Response();
};
// create some scales (aka middlewares) to wrap around the core
$scales = [];
$scales[] = new class implements ServerMiddlewareInterface {
function process(ServerRequestInterface $request, DelegateInterface $delegate) : ResponseInterface {
// delegate $request to the next request handler, i.e. $core
$response = $delegate->process($request);
return $response->withHeader('content-type', 'application/json; charset=utf-8');
}
};
$scales[] = function (ServerRequestInterface $request) : \Generator {
// delegate $request to the next request handler, i.e. the middleware right above
$response = (yield $request);
return $response->withHeader('X-PoweredBy', 'Unicorns');
};
// create an onion style middleware stack
$middlewareStack = new GreenOnion($core, ...$scales);
// and process an incoming server request
$response = $middlewareStack(new \Zend\Diactoros\ServerRequest());
/**
* Constructs a GreenOnion PSR-7+PSR-15 middleware stack.
*
* @param RequestHandlerInterface|DelegateInterface|callable $core the innermost request handler
* @param (MiddlewareInterface|ServerMiddlewareInterface|DelegateInterface|RequestHandlerInterface|callable)[] $scales the middlewares to wrap around the core
*/
public function __construct($core, ...$scales)
Inherited from Cormy\Server\RequestHandlerInterface::__invoke
/**
* Process an incoming server request and return the response.
*
* @param ServerRequestInterface $request
*
* @return ResponseInterface
*/
public function __invoke(ServerRequestInterface $request):ResponseInterface
- Cormy\Server\Onion – Onion style PSR-7 middleware stack using generators
- Cormy\Server\Bamboo – Bamboo style PSR-7 middleware pipe using generators
- Cormy\Server\RequestHandlerInterface – Common interfaces for PSR-7 server request handlers
- Cormy\Server\MiddlewareInterface – Common interfaces for Cormy PSR-7 server middlewares
- PSR-7: HTTP message interfaces
MIT © Michael Mayer