Router — segment
Framework\App\Router
Een lichtgewicht router zonder koppeling aan de App-singleton. Ondersteunt regex-patronen en named captures via positie-index.
Route gevangen! Segment =
mijn-componentOud 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
| Patroon | Matcht | Matcht 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 |