Skip to main content

Route Groups

Organize routes with common prefixes using Router::group().

Basic Grouping

use PhpCompatible\Router\Router;

Router::run(function() {
Router::group('/api', function() {
Router::get('/users', function() {
// Matches /api/users
return array('users' => array());
});

Router::get('/posts', function() {
// Matches /api/posts
return array('posts' => array());
});
});
});

Nested Groups

Router::run(function() {
Router::group('/api', function() {
Router::group('/v1', function() {
Router::get('/users', function() {
// Matches /api/v1/users
return array('version' => 1, 'users' => array());
});
});

Router::group('/v2', function() {
Router::get('/users', function() {
// Matches /api/v2/users
return array('version' => 2, 'users' => array());
});
});
});
});

API Versioning

Router::run(function() {
Router::group('/api/v1', function() {
Router::get('/users', ListUsersV1::class);
Router::post('/users', CreateUserV1::class);
Router::get('/users/:id', ShowUserV1::class);
});

Router::group('/api/v2', function() {
Router::get('/users', ListUsersV2::class);
Router::post('/users', CreateUserV2::class);
Router::get('/users/:id', ShowUserV2::class);
});
});

Organizing Route Files

routes/api.php:

<?php
use PhpCompatible\Router\Router;

Router::group('/api', function() {
Router::get('/users', ListUsers::class);
Router::post('/users', CreateUser::class);
Router::get('/users/:id', ShowUser::class);
Router::put('/users/:id', UpdateUser::class);
Router::delete('/users/:id', DeleteUser::class);
});

routes/web.php:

<?php
use PhpCompatible\Router\Router;

Router::get('/', function() {
return file_get_contents(__DIR__ . '/../views/home.html');
});

Router::get('/about', function() {
return file_get_contents(__DIR__ . '/../views/about.html');
});