A shrimp of a PSR-15 compliant middleware dispatcher

3.0.0 2018-02-11 17:55 UTC

This package is not auto-updated.

Last update: 2023-11-23 18:09:34 UTC


Caridea is a miniscule PHP application library. This shrimpy fellow is what you'd use when you just want some helping hands and not a full-blown framework.

This is its PSR-7 and PSR-15 compliant request handler, with a few middleware implementations.

Packagist Build Status Scrutinizer Code Quality Code Coverage Documentation Status


You can install this library using Composer:

$ composer require caridea/dispatch
  • The master branch (version 3.x) of this project requires PHP 7.1 and depends on psr/http-message, psr/http-server-handler, and psr/http-server-middleware.


Releases of this library will conform to Semantic Versioning.

Our code is intended to comply with PSR-1, PSR-2, and PSR-4. If you find any issues related to standards compliance, please send a pull request!



Just a few quick examples.


You can use the Runner to give it some middleware and let it handle your request.

$request = new \Zend\Diactoros\ServerRequest();
// I generally use zend-diactoros, but feel free to use whatever PSR-7 library you use

$middleware = [
    // your custom \Psr\Http\Server\MiddlewareInterface objects
$runner = new \Caridea\Dispatch\Runner($middleware);
$response = $runner->handle($request);

Your final middleware should create and return a PSR-7 ResponseInterface. You can also provide one to the Runner constructor and it handles it automatically.

$response = new \Zend\Diactoros\Response();
$runner = new \Caridea\Dispatch\Runner($middleware, $response);
$response = $runner->handle($request);

A Runner is immutable. You can use it more than once.

$runner = new \Caridea\Dispatch\Runner($middleware);
$response1 = $runner->handle($request);
$response2 = $runner->handle($request);

Priority Runner

We included an extension of the MiddlewareInterface: Caridea\Dispatch\Middleware\Prioritized. Using the Caridea\Dispatch\PriorityRunner, you can provide middleware out of order, and they get invoked in order of priority.

$middleware = [
    // your custom \Psr\Http\Server\MiddlewareInterface objects.
    // Any that implement Prioritized will get run in priority order,
    // Any others get run last, in insert order.
$runner = new \Caridea\Dispatch\PriorityRunner($middleware);

You can also use the Caridea\Dispatch\Middleware\PriorityDelegate class to assign priority to an existing middleware implementation.

$middleware = new \Caridea\Dispatch\Middleware\PriorityDelegate($middleware, 123456);


Middleware implementations we include.


Use the Caridea\Dispatch\Middleware\Reporter to capture Throwables, log them, and re-throw the exception. PSR-3 required.


A simple middleware that returns a ResponseInterface you provide.

See Also

  • This blog post from Matthew Weier O'Phinney about why PSR-15 ditched the old pattern of "double pass" middleware with anonymous functions.