Waypoint

Легковесный PSR-15 PHP-роутер с маршрутизацией на атрибутах, prefix-trie сопоставлением и конвейером middleware.

CI codecov PHPStan Level 9 Latest Stable Version PHP Version License

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


Что такое Waypoint?

Waypoint — это современный, легковесный PSR-15 совместимый PHP-роутер для PHP 8.4+. Он объединяет маршрутизацию на атрибутах, быстрый движок сопоставления на prefix-trie и конвейер PSR-15 middleware в единый элегантный пакет.

Ключевые особенности

  • Ноль обязательных зависимостей — ядро (регистрация, компиляция, trie-сопоставление, генерация URL, диагностика) работает на чистом PHP; PSR-пакеты опциональны
  • PSR-15 совместимый — реализует RequestHandlerInterface, работает с любым PSR-7 / PSR-15 стеком
  • Маршрутизация на атрибутах — объявляйте маршруты с помощью PHP 8 атрибутов #[Route] прямо на контроллерах
  • Быстрое prefix-trie сопоставление — статические сегменты разрешаются через O(1) хеш-таблицу; динамические проверяются только при необходимости
  • Конвейер middleware — глобальные и маршрутные PSR-15 middleware с FIFO-порядком выполнения
  • Группы маршрутов — общие префиксы путей и middleware для связанных маршрутов
  • Кэширование маршрутов — компиляция в PHP-файл для мгновенной загрузки через OPcache
  • Автоматическое внедрение зависимостей — параметры маршрута, ServerRequestInterface и сервисы контейнера внедряются в методы контроллеров
  • Генерация URL — обратная маршрутизация из именованных маршрутов
  • Диагностика маршрутов — обнаружение дублей, конфликтов имён и перекрытых маршрутов
  • Приоритетное сопоставление — управление тем, какой маршрут побеждает при пересечении шаблонов
  • Чистая архитектура — отдельный RouteRegistrar для построения маршрутов и Router для PSR-15 диспетчеризации

Быстрый пример

use AsceticSoft\Waypoint\RouteRegistrar;
use AsceticSoft\Waypoint\Router;
use Nyholm\Psr7\ServerRequest;

// 1. Регистрация маршрутов
$registrar = new RouteRegistrar();
$registrar->get('/hello/{name}', function (string $name) use ($responseFactory) {
    $response = $responseFactory->createResponse();
    $response->getBody()->write("Hello, {$name}!");
    return $response;
});

// 2. Создание роутера и обработка запроса
$router  = new Router($container, $registrar->getRouteCollection());
$request = new ServerRequest('GET', '/hello/world');
$response = $router->handle($request);

Несколько строк — и роутер с внедрением параметров готов. Никакого XML, YAML или шаблонного кода.


Почему Waypoint?

Возможность Waypoint Другие роутеры
PSR-15 RequestHandlerInterface Да Не всегда
PHP 8 атрибуты #[Route] Да Некоторые
Prefix-trie O(1) сопоставление Да Линейный перебор
Маршрутные middleware Да Некоторые
Кэширование маршрутов (OPcache) Да Некоторые
Авто-внедрение зависимостей Да Редко
Диагностика маршрутов Да Нет
Ноль обязательных зависимостей Чистый PHP, PSR опционально Часто много
PHPStan Level 9 Да По-разному

Требования

  • PHP >= 8.4
  • ext-mbstring

Установка

composer require ascetic-soft/waypoint

Для PSR-15 обработки запросов установите также PSR-пакеты:

composer require psr/http-message psr/http-server-handler psr/http-server-middleware psr/container

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

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

Установка, первый роутер и базовое использование за 5 минут.

Маршрутизация

Регистрация маршрутов, параметры, группы и атрибуты.

Middleware

Глобальные и маршрутные PSR-15 middleware.

Продвинутое

Внедрение зависимостей, генерация URL, кэширование и диагностика.

Справочник API

Полный справочник по всем публичным классам и методам.

Внутреннее устройство

Алгоритмы, структуры данных и диаграммы внутренней архитектуры.