53 lines
1.8 KiB
PHP
53 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace WellRESTed\Dispatching;
|
|
|
|
use Psr\Http\Message\ResponseInterface;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
use WellRESTed\MiddlewareInterface;
|
|
|
|
/**
|
|
* Dispatches an ordered sequence of middleware
|
|
*/
|
|
interface DispatchStackInterface extends MiddlewareInterface
|
|
{
|
|
/**
|
|
* Push a new middleware onto the stack.
|
|
*
|
|
* This method MUST preserve the order in which middleware are added.
|
|
*
|
|
* @param mixed $middleware Middleware to dispatch in sequence
|
|
* @return self
|
|
*/
|
|
public function add($middleware);
|
|
|
|
/**
|
|
* Dispatch the contained middleware in the order in which they were added.
|
|
*
|
|
* The first middleware added to the stack MUST be dispatched first.
|
|
*
|
|
* Each middleware, when dispatched, MUST receive a $next callable that
|
|
* dispatches the middleware that follows it, unless it is the last
|
|
* middleware. The last middleware MUST receive a $next callable that
|
|
* returns the response unchanged.
|
|
*
|
|
* When any middleware returns a response without calling the $next
|
|
* argument it recieved, the stack instance MUST stop propogating and MUST
|
|
* return a response without calling the $next argument passed to __invoke.
|
|
*
|
|
* This method MUST call the passed $next argument when:
|
|
* - The stack is empty (i.e., there is no middleware to dispatch)
|
|
* - Each middleware called the $next that it receieved.
|
|
*
|
|
* This method MUST NOT call the passed $next argument when the stack is
|
|
* not empty and any middleware returns a response without calling the
|
|
* $next it receieved.
|
|
*
|
|
* @param ServerRequestInterface $request
|
|
* @param ResponseInterface $response
|
|
* @param callable $next
|
|
* @return ResponseInterface
|
|
*/
|
|
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $next);
|
|
}
|