minormous / dispatch
An HTTP Interop compatible middleware dispatcher
dev-master
2024-12-13 00:11 UTC
Requires
- php: >=8.3
- psr/http-server-middleware: ^1.0
Requires (Dev)
- eloquent/liberator: ^3.0
- eloquent/phony-phpunit: ^7.1
- phpunit/phpunit: ^9.6
This package is auto-updated.
Last update: 2024-12-13 00:11:31 UTC
README
An HTTP Interop compatible middleware dispatcher in Minormous. Attempts to be PSR-1, PSR-2, PSR-4, PSR-7, and PSR-15 compliant.
Heavily influenced by the design of Tari by ircmaxwell.
For more information, see the documentation.
Install
composer require minormous/dispatch
Usage
The MiddlewareCollection
is a container for middleware that acts as the entry point.
It takes two arguments:
- An array of
$middleware
which must be instances of server middleware. - A callable
$default
that acts as the terminator for the collection and returns an empty response.
Once the collection is prepared it can dispatched with a server request and will return the response for output.
Example
use Minormous\Dispatch\MiddlewareCollection; // Any implementation of PSR-15 MiddlewareInterface $middleware = [ new FooMiddleware(), // ... ]; // Default handler for end of collection $default = function (ServerRequestInterface $request) { // Any implementation of PSR-7 ResponseInterface return new Response(); }; $collection = new MiddlewareCollection($middleware); // Any implementation of PSR-7 ServerRequestInterface $request = ServerRequest::fromGlobals(); $response = $collection->dispatch($request, $default);
Nested Collections
The MiddlewareCollection
also implements the MiddlewareInterface
to allow
collections to be nested:
use Minormous\Dispatch\MiddlewareCollection; // Any implementation of PSR-15 MiddlewareInterface $middleware = [ new FooMiddleware(), // A nested collection new MiddlewareCollection(...), // More middleware new BarMiddleware(), // ... ]; $collection = new MiddlewareCollection($middleware); // HTTP factories can also be used $default = [$responseFactory, 'createResponse']; $request = $serverRequestFactory->createRequest($_SERVER); $response = $collection->dispatch($request, $default);