cloudcastle/http-router

Fast, standalone, PSR-friendly HTTP router for PHP with zero runtime dependencies.

Maintainers

Package info

github.com/cloudcastle-apps/http-router

pkg:composer/cloudcastle/http-router

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 18

dev-main / 0.1.x-dev 2026-07-07 12:19 UTC

This package is not auto-updated.

Last update: 2026-07-07 12:32:01 UTC


README

Packagist PHP License Quality

Быстрый, безопасный и строго типизированный HTTP-роутер для PHP 8.1+ без единой runtime-зависимости.

⚠️ Статус: активная разработка (ветка 0.x). Реализовано текучее ядро маршрутизации (раздел «Возможности»). Остальные пункты из Roadmap находятся в работе и в документации явно помечены как «планируется». Мы принципиально не описываем и не рекламируем то, чего ещё нет в коде — см. сравнение с аналогами, где честно показаны и сильные, и слабые стороны.

Возможности (реализовано)

  • Ноль runtime-зависимостей — только сам PHP. Интеграция с PSR-7/PSR-15 будет опциональной.
  • Текучее (fluent) определение маршрутов->name(), ->where() в цепочке вызовов.
  • Все HTTP-глаголы и кастомные методыget/post/put/patch/delete/head/options, match([...]) для нескольких методов, any(), custom('PURGE', …) для нестандартных методов.
  • Параметры и ограничения/{id} (по умолчанию [^/]+), встроенные /{id:\d+} и ->where('id', '\d+') (приоритет у where()).
  • Безопасное сопоставление — статические сегменты экранируются, . и другие мета-символы трактуются буквально, параметр не «перепрыгивает» через /.
  • Различение 404 и 405 — «путь не найден» отделён от «метод не разрешён»; для 405 доступен список допустимых методов (для заголовка Allow).
  • Именованные маршруты — поиск по имени (getByName()).
  • Строгая типизацияdeclare(strict_types=1), нативные типы, PHPStan max + Psalm level 1.

Требования

  • PHP 8.1 или новее.
  • Никаких других runtime-зависимостей.

Установка

composer require cloudcastle/http-router

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

use CloudCastle\Http\Router\Router;
use CloudCastle\Http\Router\Exception\MethodNotAllowedException;
use CloudCastle\Http\Router\Exception\RouteNotFoundException;

$router = new Router();

$router->get('/', 'home');
$router->get('/users/{id}', 'users.show')->name('users.show')->where('id', '\d+');
$router->post('/users', 'users.store');
$router->match(['PUT', 'PATCH'], '/users/{id}', 'users.update');
$router->custom('PURGE', '/cache/{key}', 'cache.purge'); // произвольный HTTP-метод

try {
    $match = $router->dispatch($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);

    $action = $match->getRoute()->getAction(); // 'users.show'
    $id     = $match->getParameter('id');      // '42' для /users/42
} catch (MethodNotAllowedException $e) {
    header('Allow: ' . implode(', ', $e->getAllowedMethods()), true, 405);
} catch (RouteNotFoundException $e) {
    http_response_code(404);
}

Действие (action) — любое значение (строка, callable, пара [Controller::class, 'method']): роутер хранит и возвращает его как есть. Исполнение действий появится вместе с ActionResolver.

Сравнение с аналогами (кратко)

Полные таблицы (возможности, качество кода, зависимости) — в docs/ru/comparison.md. Кратко и честно, на текущий момент:

Критерий CloudCastle (сейчас) Symfony Laravel FastRoute Slim Nette
Базовая маршрутизация
Параметры + ограничения
Кастомные HTTP-методы
Именованные маршруты
Ноль runtime-зависимостей
Группы / middleware / PSR-15 🚧 ⚠️ ⚠️
Rate limit / auto-ban / IP-фильтр 🚧 ⚠️ ⚠️
Генерация URL / кэш маршрутов 🚧 ⚠️ ⚠️

✅ есть · ⚠️ частично / вне ядра · ❌ нет · 🚧 у нас в разработке (см. Roadmap).

Честный вывод: сегодня по широте возможностей мы уступаем зрелым роутерам — многое ещё в разработке. Наши текущие преимущества — ноль зависимостей, строгая типизация и качество кода (ниже). Цель проекта — довести функциональность до уровня «всё, что умеют конкуренты вместе», не потеряв в качестве и безопасности.

Качество

Каждое изменение проходит composer ci: PHP-CS-Fixer + phpcs (PSR-12), PHPStan (max, без baseline), Psalm (level 1), PHPMD, Deptrac, Rector, затем 5 наборов тестов с пофайловым порогом покрытия и мутационным тестированием Infection. Актуальные метрики и методика — в docs/ru/testing.md.

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

Лицензия

MIT.