ForgeRouter Module
Overview
ForgeRouter is a powerful and flexible routing module for the Forge Framework that handles HTTP requests, route definitions, middleware integration, and controller management. It provides an expressive and intuitive API for defining your application's routes.
Basic Routing
Define routes using the router instance with HTTP methods:
use Forge\Core\Helpers\App;
$router = App::router();
// Basic route with closure
$router->get('/', function () {
return (new Response())->html('Welcome');
});
// Route with controller
$router->get('/users', [UserController::class, 'index']);
// Route with parameters
$router->get('/docs/{category}/{slug}', [DocController::class, 'index']);
Route Groups
Group related routes with shared attributes:
$router->group('/admin', function (RouterInterface $router) {
$router->middleware([AdminAuthMiddleware::class]);
$router->get('/', function () {
return (new Response())->html('Welcome Admin');
});
$router->get('/dashboard', function () {
return (new Response())->html('Welcome to the dashboard');
});
});
Middleware
Middleware provides a mechanism for filtering HTTP requests:
// Apply middleware to a route group
$router->group('/dashboard', function (RouterInterface $router) {
$router->middleware([\Forge\Modules\ForgeAuth\Middleware\AuthMiddleware::class]);
$router->get('/', [DashboardController::class, 'index']);
});
// Apply middleware to a single route
$router->get('/files/{clean_path}', [FileController::class, 'serveFile'],
[FileExpirationMiddleware::class]);
Request & Response Handling
ForgeRouter provides robust Request and Response objects for handling HTTP interactions:
use Forge\Http\Request;
use Forge\Http\Response;
class HomeController
{
public function index(Request $request): Response
{
// Access request data
$query = $request->getQuery();
$data = $request->getData();
$headers = $request->getHeaders();
// Return response
return (new Response())
->setStatusCode(200)
->setHeader('Content-Type', 'application/json')
->json(['status' => 'success']);
}
}
Controllers
Controllers organize your route handling logic:
class UserController
{
public function index(Request $request): Response
{
$users = User::all();
return $this->view->render('users.index', ['users' => $users]);
}
public function show(Request $request, $id): Response
{
return (new Response())->html('User Show by Param');
}
}
Note: Controllers can be dependency-injected and use other Forge Framework features like views, models, and services.