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);