# Посредники HttpSoft\Router

Классы посредников пакета HttpSoft\Router, реализующие Psr\Http\Server\MiddlewareInterface.

Все посредники содержат только один публичный метод Psr\Http\Server\MiddlewareInterface::process().

public function process(
    Psr\Http\Message\ServerRequestInterface $request, 
    Psr\Http\Server\RequestHandlerInterface $handler
): Psr\Http\Message\ResponseInterface;

# HttpSoft\Router\Middleware\RouteMatchMiddleware

Используя сборщик маршрутов, сопоставляет входящий запрос с добавленными маршрутами. При совпадении регистрирует экземпляр HttpSoft\Router\Route как атрибут запроса, используя имя класса HttpSoft\Router\Route в качестве имени атрибута, и передает запрос следующему посреднику. Если ни один маршрут не соответствует запросу, то запрос не будет модифицирован.

public function __construct(
    HttpSoft\Router\RouteCollector $router,
    Psr\Http\Message\ResponseFactoryInterface $responseFactory,
    array $allowedMethods = ['HEAD'] // общие разрешенные методы запроса для всех маршрутов.
);

Если URI запроса соответствует одному из маршрутов, но метод запроса не соответствует методу этого маршрута, то этот посредник вернет 405 ответ вместе с заголовком Allow, указывающим разрешенные методы маршрута.

Исходный код на GitHub.

# HttpSoft\Router\Middleware\RouteDispatchMiddleware

Проверяет наличие совпадающего маршрута (экземпляра HttpSoft\Router\Route) в качестве атрибута в запросе. Если он существует, то используется обработчик этого маршрута, иначе обработка запроса делегируется обработчику, который передается аргументом в метод process().

public function __construct(HttpSoft\Runner\MiddlewareResolverInterface $resolver);

Если совпадающий маршрут был передан, то для резолвинга обработчика маршрута используется экземпляр HttpSoft\Runner\MiddlewareResolverInterface из пакета HttpSoft\Runner.

Исходный код на GitHub.