High Performance
Dynamic routes of each method compile into one regex shaped as a prefix tree, so lookup time barely grows with the route count. A route cache loads prebuilt routers from OPcache.
Fluent definitions, immutable runtime routes, typed results, and advanced optional segment patterns.
Solo Router 4.0.0 separates route configuration from request resolution. The core requires PHP 8.3 or later, with no external runtime packages. See installation, migration from v3, and performance measurements.
use Solo\Router\RouteCollector;
use Solo\Router\Results\Matched;
use Solo\Router\Results\MethodNotAllowed;
$routes = new RouteCollector();
$routes->get('/users/{id}', [UserController::class, 'show'])
->name('users.show')
->middleware(AuthMiddleware::class);
$router = $routes->build();
$result = $router->resolve('GET', '/users/123');
if ($result instanceof Matched) {
$handler = $result->route->handler;
$params = $result->params; // ['id' => '123']
$middlewares = $result->route->middlewares;
} elseif ($result instanceof MethodNotAllowed) {
http_response_code(405);
header('Allow: ' . implode(', ', $result->allowedMethods));
} else {
http_response_code(404);
}Configuration changes affect subsequent builds only. The router returns metadata; your application executes middleware and handlers.
composer require "solophp/router:^4.0"Requirements: PHP 8.3 or later and Composer.