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
- Keep route definitions clean and organized
- Use route groups for related endpoints
- Apply middleware at the group level when possible
- Validate route parameters when appropriate
- Follow RESTful conventions for resource endpoints