🍤 Caridea is a miniscule PHP application library. This is a shrimpy middleware dispatcher library.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



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.