FrameworkDocs
PHP 8.4+ UIkit 3 FA 6 Pro

Schnellstart

PHP – Grundlegende Routen
use App\Routing\Router;
use App\Controller\UserController;

$router = new Router();

// Controller-Methode
$router->get('/users',         UserController::class, 'index');
$router->post('/users',        UserController::class, 'store');
$router->get('/users/{id}',    UserController::class, 'show');
$router->put('/users/{id}',    UserController::class, 'update');
$router->delete('/users/{id}', UserController::class, 'destroy');

// Closure
$router->get('/health', fn($req) => Response::json(['status' => 'ok']));

// Route dispatchen
$response = $router->dispatch();
$response->send();

Methoden

MethodeRückgabetypBeschreibung
get(string $path, Closure|string $controller, ?string $action) RouteBuilder Registriert eine GET-Route. Gibt einen RouteBuilder für weitere Konfiguration zurück.
post(…) RouteBuilder Registriert eine POST-Route.
put(…) / patch(…) / delete(…) / options(…) RouteBuilder Registriert Routen für die jeweilige HTTP-Methode.
match(array $methods, string $path, …) void Registriert eine Route für mehrere HTTP-Methoden gleichzeitig. Gibt kein RouteBuilder zurück.
group(string $prefix, array $middleware, Closure $callback) void Erstellt eine Routen-Gruppe mit gemeinsamem Prefix und Middleware. Gruppen können beliebig tief verschachtelt werden.
use(MiddlewareInterface $middleware) void Fügt globale Middleware hinzu, die bei jeder Route ausgeführt wird.
registerController(string $controllerClass) void Scannt eine Controller-Klasse nach #[Route]-Attributen und registriert alle gefundenen Routen automatisch.
dispatch(?Request $request) Response Verarbeitet den eingehenden Request. Gibt 404 zurück wenn keine Route passt, 405 wenn der Pfad existiert aber die HTTP-Methode nicht erlaubt ist.
url(string $name, array $params = []) string Generiert eine URL für eine benannte Route. Wirft InvalidArgumentException wenn der Name unbekannt ist oder ein Parameter fehlt.

Routengruppen

Gruppen ermöglichen gemeinsame Prefixes und Middleware für mehrere Routen:

PHP
// API-Gruppe mit Prefix und Auth-Middleware
$router->group('api', [AuthMiddleware::class, RateLimitMiddleware::class], function(Router $r) {
    $r->get('/users',         UserController::class, 'index');
    $r->post('/users',        UserController::class, 'store');

    // Verschachtelte Gruppe
    $r->group('admin', [AdminMiddleware::class], function(Router $r) {
        $r->delete('/users/{id}', UserController::class, 'destroy');
        // Pfad: /api/admin/users/{id}
    });
});

// Öffentliche Routen ohne Middleware
$router->group('auth', [], function(Router $r) {
    $r->get('/login',   AuthController::class, 'showLogin');
    $r->post('/login',  AuthController::class, 'login');
    $r->post('/logout', AuthController::class, 'logout');
});

Route-Parameter

PHP – Parameter-Syntax
// Pflicht-Parameter
$router->get('/users/{id}', UserController::class, 'show');

// Optionaler Parameter
$router->get('/articles/{slug?}', ArticleController::class, 'index');

// Mehrere Parameter
$router->get('/shop/{category}/{product}', ShopController::class, 'show');

// Constraints über RouteBuilder
$router->get('/users/{id}', UserController::class, 'show')
    ->whereNumber('id');           // Nur Ganzzahlen

$router->get('/articles/{slug}', ArticleController::class, 'show')
    ->whereSlug('slug');           // URL-Slug: a-z0-9 und Bindestriche

$router->get('/items/{uuid}', ItemController::class, 'show')
    ->whereUuid('uuid');           // UUID v4
PHP – Parameter im Controller lesen
class UserController
{
    public function show(Request $request, string $id): Response
    {
        // $id kommt direkt als Parameter
        $user = User::find((int) $id);
        return Response::json($user);
    }
}

Attribut-basiertes Routing

PHP
use App\Routing\Route;
use App\Routing\HttpMethod;

class UserController
{
    #[Route('/users', HttpMethod::GET, name: 'users.index')]
    public function index(Request $request): Response { ... }

    #[Route('/users/{id}', HttpMethod::GET, name: 'users.show')]
    public function show(Request $request, string $id): Response { ... }

    #[Route('/users', HttpMethod::POST, name: 'users.store',
            middleware: [CsrfMiddleware::class])]
    public function store(Request $request): Response { ... }
}

// Controller registrieren
$router->registerController(UserController::class);

URL-Generierung

PHP
// Route benennen
$router->get('/users/{id}', UserController::class, 'show')->name('users.show');
$router->get('/shop/{cat}/{product}', ShopController::class, 'show')->name('shop.product');

// URL generieren
$url = $router->url('users.show', ['id' => 42]);
// → /users/42

$url = $router->url('shop.product', ['cat' => 'electronics', 'product' => 'laptop']);
// → /shop/electronics/laptop

// Mit Query-String (überschüssige Parameter)
$url = $router->url('users.show', ['id' => 42, 'tab' => 'profile']);
// → /users/42?tab=profile

Globale Middleware

PHP
// Globale Middleware (wird bei JEDER Route ausgeführt)
$router->use(new SecurityHeadersMiddleware());

// Routen-spezifisch
$router->post('/login', AuthController::class, 'login')
    ->middleware(CsrfMiddleware::class, RateLimitMiddleware::class);

// Gruppen-Middleware
$router->group('admin', [AuthMiddleware::class], function(Router $r) {
    // Alle Routen hier erfordern Authentifizierung
    $r->get('/dashboard', DashboardController::class, 'index');
});