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.