cormy/onion

Onion style PSR-7 middleware stack using generators

0.2.0 2016-12-04 10:08 UTC

This package is not auto-updated.

Last update: 2021-11-27 11:35:10 UTC


README

SensioLabsInsight

🌷 Onion style PSR-7 middleware stack using generators

Install

composer require cormy/onion

Usage

use Cormy\Server\Onion;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

// 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[] = function (ServerRequestInterface $request):\Generator {
    // delegate $request to the next request handler, i.e. $core
    $response = (yield $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 Onion($core, ...$scales);

// and process an incoming server request
$response = $middlewareStack(new \Zend\Diactoros\ServerRequest());

API

Cormy\Server\Onion implements RequestHandlerInterface

Onion::__construct

/**
 * Constructs an onion style PSR-7 middleware stack.
 *
 * @param RequestHandlerInterface|callable                         $core   the innermost request handler
 * @param (MiddlewareInterface|RequestHandlerInterface|callable)[] $scales the middlewares to wrap around the core
 */
public function __construct(callable $core, callable ...$scales)

Inherited from RequestHandlerInterface::__invoke

/**
 * Process an incoming server request and return the response.
 *
 * @param ServerRequestInterface $request
 *
 * @return ResponseInterface
 */
public function __invoke(ServerRequestInterface $request):ResponseInterface

Related

License

MIT © Michael Mayer