Waypoint
Легковесный PSR-15 PHP-роутер с маршрутизацией на атрибутах, prefix-trie сопоставлением и конвейером middleware.
Что такое 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
Полный справочник по всем публичным классам и методам.
Внутреннее устройство
Алгоритмы, структуры данных и диаграммы внутренней архитектуры.