FastRoute with PSR-7 Wrapper Library.
composer require wandu/router
$dispatcher = new \Wandu\Router\Dispatcher();
$routes = $dispatcher->createRouteCollection();
$routes->get('/', HomeController::class);
$routes->get('/users', UserController::class, 'index');
$routes->get('/users/:id', UserController::class, 'show');
$request = new ServerRequest('GET', '/'); // PSR7 ServerRequestInterface implementation
$response = $dispatcher->dispatch($routes, $request);
static::assertInstanceOf(ResponseInterface::class, $response);
static::assertEquals('index', $response->getBody()->__toString());
$request = new ServerRequest('GET', '/nothing'); // PSR7 ServerRequestInterface implementation
try {
$dispatcher->dispatch($routes, $request);
} catch (RouteNotFoundException $e) {
static::assertEquals('Route not found.', $e->getMessage());
}
class HomeController
{
public static function index()
{
return new Response(200, new StringStream("index"));
}
}
$routes->get('/users/:id(\d+)?', UserController::class, 'show');
$routes->get('/users-:id', UserController::class, 'show');
class UserController
{
public static function show(ServerRequestInterface $request)
{
return new Response(200, new StringStream("{$request->getAttribute('id')}"));
}
}
You can use all patterns in path-to-regexp.