cloud-castle/middleware

PSR-15 конвейер middleware для PHP 8.1+: диспетчер очереди обработчиков, обёртки callable-middleware и ленивое разрешение из контейнера. Реализует psr/http-server-middleware.

Maintainers

Package info

gitverse.ru/cloud-castle/middleware

Homepage

Issues

Documentation

pkg:composer/cloud-castle/middleware

Transparency log

Statistics

Installs: 11

Dependents: 2

Suggesters: 0

v1.0.2 2026-07-29 08:35 UTC

This package is auto-updated.

Last update: 2026-07-29 09:11:53 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Middleware

CloudCastle Middleware

Packagist Version Downloads PHP Version License

PSR-15 диспетчер middleware: пропускает запрос через неизменяемую очередь обработчиков к финальному handler'у. Адаптеры для замыканий и ленивое разрешение. Одни PSR-контракты в зависимостях — работает с любым PSR-7 стеком.

Установка

composer require cloud-castle/middleware

Требуется PHP 8.1+. Зависит только от PSR-интерфейсов (http-message, http-server-handler, http-server-middleware).

Быстрый старт

<?php

use CloudCastle\Middleware\CallableMiddleware;
use CloudCastle\Middleware\CallableRequestHandler;
use CloudCastle\Middleware\Dispatcher;

// Финальный обработчик очереди.
$fallback = new CallableRequestHandler(
    static fn ($request) => new Response(200, [], 'Готово'),
);

// Очередь: middleware выполняются в порядке добавления.
$dispatcher = new Dispatcher(
    $fallback,
    new CallableMiddleware(static function ($request, $handler) {
        $response = $handler->handle($request->withAttribute('id', 42));

        return $response->withHeader('X-Trace', 'on');
    }),
);

// Диспетчер неизменяем: with* возвращает копию.
$dispatcher = $dispatcher->withMiddleware($authMiddleware);

$response = $dispatcher->handle($serverRequest);

Возможности

  • PSR-15 Dispatcher — реализует RequestHandlerInterface, проводит запрос через очередь MiddlewareInterface к финальному обработчику. Неизменяем: один диспетчер безопасно переиспользовать, withMiddleware() даёт копию.
  • CallableMiddleware — обёртка замыкания fn ($request, $handler): ResponseInterface в middleware без отдельного класса.
  • CallableRequestHandler — обёртка замыкания fn ($request): ResponseInterface в обработчик; удобно как финальный handler очереди.
  • LazyMiddleware — ленивое разрешение middleware из фабрики (например, из контейнера) с кэшированием: фабрика вызывается лишь если очередь дошла до шага.

Сравнение с аналогами

Возможностьmiddlewarerelay/relaylaminas/stratigilitymiddlewares/utilsnorthwoods/brokerequip/dispatch
PSR-15 диспетчер
Неизменяемая очередь🏆 ✅⚠️⚠️
Адаптер замыканий⚠️⚠️⚠️
Ленивое разрешение🏆 ✅
Runtime-зависимостей🏆 3 (PSR)24+5+33
Контейнер обязателен🏆 нетнетнетнетдада

Когда применять. middleware уместен там, где нужен предсказуемый PSR-15 конвейер без привязки к фреймворку и контейнеру: точки входа приложения, композиция сквозной логики (аутентификация, CORS, трассировка). Если нужны готовые наборы middleware «из коробки» (CORS, сжатие, кэш) — посмотрите middlewares/*: это их сильная сторона, здесь она сознательно не дублируется, пакет даёт только ядро диспетчеризации.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano