raxos / router
A fast and simple router, built with php attributes.
Requires
- php: >=8.5
- ext-ctype: *
- ext-fileinfo: *
- ext-json: *
- ext-simplexml: *
- jetbrains/phpstorm-attributes: ^1.2
- raxos/collection: *
- raxos/container: *
- raxos/contract: *
- raxos/error: *
- raxos/foundation: *
- raxos/http: *
Requires (Dev)
- pestphp/pest: ^5.0
- raxos/database: *
Suggests
- raxos/database: to use the MapModel router parameter attribute.
Provides
None
Conflicts
None
Replaces
None
- dev-main
- 3.2.0
- 3.1.0
- 3.0.1
- 3.0.0
- 2.3.4
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.9.0
- 1.8.2
- 1.8.1
- 1.8.0
- 1.7.0
- 1.6.1
- 1.6.0
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.20
- 1.0.19
- 1.0.18
- 1.0.17
- 1.0.15
- 1.0.14
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.1.0
- dev-copilot/improve-frame-handling
- dev-copilot/fix-performance-bottlenecks
- dev-copilot/improve-regex-performance
- dev-copilot/fix-route-resolving-issues
This package is auto-updated.
Last update: 2026-10-03 12:06:37 UTC
README
Raxos Router
Map PHP controller attributes to HTTP routes, with dependency injection and middleware.
Documentation | Packagist | Raxos
- Static and dynamic routes with typed path parameters.
- Query, header, request-model and relation mapping attributes.
- Nested controllers, validation, middleware and configurable responses.
- CORS preflight handling and mappings that can be reused across router instances.
Installation
Requires PHP 8.5 or later. Enable the ctype, fileinfo, json, simplexml PHP extensions. Composer checks the remaining package and extension dependencies declared in composer.json.
composer require "raxos/router:^3.2"
Usage
<?php declare(strict_types=1); use Raxos\Container\Container; use Raxos\Http\HttpMethod; use Raxos\Http\HttpRequest; use Raxos\Http\Response\JsonHttpResponse; use Raxos\Router\Attribute\Controller; use Raxos\Router\Attribute\Get; use Raxos\Router\Router; require __DIR__ . '/vendor/autoload.php'; #[Controller('/products')] final readonly class ProductController { #[Get('/$id')] public function show(int $id): JsonHttpResponse { return new JsonHttpResponse(['id' => $id]); } } $router = Router::createFromControllers(new Container(), [ProductController::class]); $request = HttpRequest::create(method: HttpMethod::GET, uri: '/products/42'); $router->resolve($request)->send();
Path parameters use $name, matching the controller method parameter. Use HttpRequest::createFromGlobals() for incoming web requests. CORS preflight runs middleware and reports allowed methods without executing the target action; explicit OPTIONS handlers still run normally.
Documentation
Testing
Run this library's Pest suite from the Raxos workspace:
git clone --recurse-submodules https://github.com/basmilius/raxos.git
cd raxos
composer install
vendor/bin/pest --testsuite=router
See Testing Raxos for PHP extensions, integration services and coverage commands. The library's Tests workflow also runs in GitHub Actions.
License
MIT. Copyright (c) 2017 - present Bas Milius.