Skip to main content

Routing

Orkestra provides a flexible and powerful routing system to handle HTTP requests and direct them to the appropriate controllers.

Basic Routing​

Routes are defined in the config/routes.php file using the router instance:

use Orkestra\Router;

return function (Router $router) {
$router->get('/', HomeController::class);
$router->get('/users', UserListController::class);
$router->post('/users', CreateUserController::class);
$router->get('/users/{id}', UserDetailsController::class);
$router->put('/users/{id}', UpdateUserController::class);
$router->delete('/users/{id}', DeleteUserController::class);
};

HTTP Methods​

Orkestra supports all common HTTP methods:

$router->get('/resource', ResourceController::class);
$router->post('/resource', CreateResourceController::class);
$router->put('/resource/{id}', UpdateResourceController::class);
$router->patch('/resource/{id}', PatchResourceController::class);
$router->delete('/resource/{id}', DeleteResourceController::class);
$router->options('/resource', ResourceOptionsController::class);

Route Parameters​

Routes can include parameters, which are passed to the controller:

$router->get('/users/{id}', function(ServerRequestInterface $request, array $params): ResponseInterface {
$userId = $params['id'];
// Process the request using $userId
return new Response();
});

Optional Parameters​

You can define optional parameters using the ? modifier:

$router->get('/users/{id?}', UserController::class);

Parameter Validation​

You can validate parameters directly in route definitions:

$router->get('/users/{id:[0-9]+}', UserController::class);
$router->get('/articles/{slug:[a-z0-9\-]+}', ArticleController::class);

Route Groups​

Group related routes together:

$router->group('/admin', function (Router $router) {
$router->get('/dashboard', AdminDashboardController::class);
$router->get('/users', AdminUsersController::class);
$router->get('/settings', AdminSettingsController::class);
});

Middleware​

Apply middleware to routes:

$router->get('/protected', ProtectedController::class)
->middleware(AuthMiddleware::class);

$router->group('/admin', function (Router $router) {
$router->get('/dashboard', AdminDashboardController::class);
})->middleware([AuthMiddleware::class, AdminMiddleware::class]);

Best Practices​

  1. Keep route definitions clean and organized
  2. Use route groups for related endpoints
  3. Apply middleware at the group level when possible
  4. Validate route parameters when appropriate
  5. Follow RESTful conventions for resource endpoints