Router

Framework\App\Router

Een lichtgewicht router zonder koppeling aan de App-singleton. Ondersteunt regex-patronen en named captures via positie-index.

Oud vs. Nieuw

❌ App\Routing\Router::handle() — CMS-gekoppeld

// handle() doet ook:
$container = App::getStaticInstance()
    ->getView()
    ->navigation('NavigationSitemap');  // Laminas!
$page = $container->findOneBy('active', true);
App::getStaticInstance()->seo($label);  // ook CMS

// Gevolg: niet bruikbaar zonder volledig
// geconfigureerde App-instantie + DB

✅ Framework\App\Router::dispatch() — zelfstandig

$router = new Framework\App\Router();

$router->add('/', fn($req) =>
    'Hallo wereld!'
);

$router->add('/artikel/([a-z0-9-]+)',
    fn($req) => 'Slug: ' . $req->param(0)
);

$router->add('/api/([a-z]+)/(\d+)',
    fn($req) => json_encode([
        'resource' => $req->param(0),
        'id'       => $req->param(1),
    ])
);

echo $router->dispatch($uri) ?? '404';

Live demo — probeer een URL

Klik op een link hieronder. De Router matcht de URL en geeft het segment door aan de pagina.

Patroon-voorbeelden

PatroonMatchtMatcht niet
/artikel/([a-z-]+)✓ /artikel/mijn-blog✗ /artikel/123
/api/([a-z]+)/(\d+)✓ /api/users/42✗ /api/42/users
/\d{4}/\d{2}/\d{2}✓ /2025/05/04✗ /2025/5/4
/([a-z]{2})/(.+)✓ /nl/over-ons✗ /NL/over-ons