cloud-castle / middleware
PSR-15 конвейер middleware для PHP 8.1+: диспетчер очереди обработчиков, обёртки callable-middleware и ленивое разрешение из контейнера. Реализует psr/http-server-middleware.
Requires
- php: >=8.1
- psr/http-message: ^2.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- deptrac/deptrac: ^3.0 || ^4.0
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.75
- icanhazstring/composer-unused: ^0.9
- infection/infection: ^0.29 || ^0.33
- nyholm/psr7: ^1.8
- php-parallel-lint/php-parallel-lint: ^1.4
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.12 || ^2.1
- phpstan/phpstan-deprecation-rules: ^1.2 || ^2.0
- phpstan/phpstan-phpunit: ^1.4 || ^2.0
- phpstan/phpstan-strict-rules: ^1.6 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- psalm/plugin-phpunit: ^0.19 || ^0.20
- rector/rector: ^1.2 || ^2.0
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.12 || ^4.0
- vimeo/psalm: ^6.0
- webmozart/assert: ^1.11
Provides
This package is auto-updated.
Last update: 2026-07-29 09:11:53 UTC
README
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CloudCastle Middleware
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 из фабрики (например, из контейнера) с кэшированием: фабрика вызывается лишь если очередь дошла до шага.
Сравнение с аналогами
| Возможность | middleware | relay/relay | laminas/stratigility | middlewares/utils | northwoods/broker | equip/dispatch |
|---|---|---|---|---|---|---|
| PSR-15 диспетчер | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Неизменяемая очередь | 🏆 ✅ | ⚠️ | ⚠️ | ✅ | ❌ | ❌ |
| Адаптер замыканий | ✅ | ⚠️ | ✅ | ✅ | ⚠️ | ⚠️ |
| Ленивое разрешение | 🏆 ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| Runtime-зависимостей | 🏆 3 (PSR) | 2 | 4+ | 5+ | 3 | 3 |
| Контейнер обязателен | 🏆 нет | нет | нет | нет | да | да |
Когда применять. 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.
Документация
- Репозиторий: https://gitverse.ru/cloud-castle/middleware
- История изменений: CHANGELOG.md
- Как внести вклад: CONTRIBUTING.md
- Кодекс поведения: CODE_OF_CONDUCT.md
- Политика безопасности: SECURITY.md
Лицензия
MIT © CloudCastle (alex-4-17@yandex.ru)
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano