HTTP Middleware компонент

Описание

Компонент предоставляет возможность вмешиваться в логику выполнения маршрута вне зависимости от того был ли он найден.

Установка

Компонент включен в состав micro/plugin-http-pack.

Для установки библиотеки воспользуйтесь composer

$ composer require micro/plugin-http-middleware

И добавьте в список плагинов. По умолчанию {PROJECT ROOT DIR}/etc/plugins.php

Применение.

Плагин дает возможность внедрения какого-либо вне зависимости от того будет ли найден маршрут, либо нет. Внедренный код будет выполнен до того как будет выполнен коллбэк контроллера.

Метод HttpMiddlewarePluginInterface::getRequestMatchPath возвращает match паттерн. Метод HttpMiddlewareOrderedPluginInterface::getMiddlewarePriority возвращает приоритет выполнения конкретного middleware.

Чтобы внедрить middleware, вам необходимо создать (либо использовать существующие плагины) и имплементировать один из интерфейсов

Для удобства, советуем использовать специально подготовленный трейт MiddlewareAllowAllTrait

Пример использования

<?php

use Micro\Plugin\Http\Plugin\HttpMiddlewarePluginInterface;
use Micro\Plugin\Http\Exception\HttpUnauthorizedException

class HttpMiddlewareAccessPlugin implements HttpMiddlewarePluginInterface
{
  public function getRequestMatchMethods(): array
  {
        return ['post', 'patch', 'put', 'delete'];
  }
  
  public function getRequestMatchPath(): string
  {
    return '^/user'; // match pattern
  }

  public function processMiddleware(Request $request): void
  {
    throw new HttpUnauthorizedException();
  }
}

/**
 * Request example
 */

use Micro\Plugin\Http\Facade\HttpFacadeInterface;

$request = Request::create('/user/123', 'POST', [ 'username' => 'changed', ]);
$container->get(HttpFacadeInterface::class)->execute($request); // Throws HttpUnauthorizedException