Routing
De TubePress Router-API: hoe front-end-, beheer- en API-routes worden geregistreerd, gematcht en afgehandeld, inclusief routeparameters en HTTP-methoden.
TubePress gebruikt een kleine, snelle router die is gebouwd rond de statische Router-klasse. Controllers registreren hun routes in een ::routes()-methode, en public/index.php roept die methoden aan voordat het verzoek wordt afgehandeld. Op deze pagina vindt u alles wat u nodig hebt om routes toe te voegen vanuit een plugin, of om te begrijpen hoe verzoeken worden gematcht.
Routes registreren
Registreer een route met Router::get() of Router::post(). De handler is elk aanroepbaar object — een closure of een [Class, 'method']-paar.
// Closure handler
Router::get('/promo', function () {
ThemeRenderer::render('promo', ['deal' => 'Summer']);
});
// Controller handler
Router::post('/promo/claim', [PromoController::class, 'claim']);Per conventie stelt elke controller een statische routes()-methode beschikbaar die al zijn routes registreert, en die methode wordt eenmalig aangeroepen bij het opstarten:
class PromoController
{
public static function routes(): void
{
Router::get('/promo', [self::class, 'show']);
Router::post('/promo/claim', [self::class, 'claim']);
}
}Routeparameters
Gebruik {name}-plaatshouders in het pad; elk komt overeen met één URL-segment (alles behalve /). Lees de waarde op met Router::param().
Router::get('/promo/{code}', function () {
$code = Router::param('code'); // required
$ref = Router::param('ref', 'direct'); // with a default
// …
});Intern wordt een patroon zoals /promo/{code} gecompileerd naar de regex (?P<code>[^/]+), zodat parameters nooit schuine strepen omvatten. Exacte routes worden als eerste gematcht, daarna geparametriseerde routes in volgorde van registratie.
Een antwoord versturen
| Methode | Gebruik |
|---|---|
ThemeRenderer::render($tpl, $data) | Een front-endpagina weergeven via het actieve thema. |
Router::render($tpl, $data) | Een beheerdersjabloon weergeven (templates/{$tpl}.php). |
Router::json($data, $code = 200) | Een JSON-antwoord versturen en afsluiten. |
Router::redirect($url) | Doorverwijzen (en afsluiten). Front-end-URL's worden automatisch voorzien van het actieve taal-/typeprefix. |
Routevolgorde en de catch-all
Statische pagina's worden bediend door een /{slug}-catch-all, dus de paginacontroller wordt als laatste geregistreerd in public/index.php — na alle andere front-, beheerder- en API-routes. Als u routes registreert vanuit een plugin tijdens het opstarten, worden ze toegevoegd vóór de catch-all en worden ze als eerste gematcht.
/deals overschaduwt een statische pagina op /deals. Gebruik namespaces voor pluginroutes (bijvoorbeeld /promo/deals) om dit te voorkomen.CSRF-beveiliging
Elke toestandsveranderende POST moet CSRF-beveiligd zijn. De router biedt de volgende hulpfuncties:
// In your form template
<?= Router::csrfField() ?> // hidden input
// In your POST handler
if (!Router::verifyCsrf()) {
Router::json(['error' => 'Invalid token'], 403);
}verifyCsrf() accepteert het token uit het csrf_token POST-veld of de X-CSRF-Token-header, en vergelijkt het met hash_equals().
Gelokaliseerde en getypte URL's
Voor meertalige sites verwerkt de router transparant een taalprefix (bijvoorbeeld /fr/…) en vertaalt bekende routeslugs, zodat /categorie/brunette wordt omgezet naar de category-route. Beheerder- en installateroutes zijn vrijgesteld — registreer een pad met Router::addNoPrefixPath() als u een aangepast pad wilt uitzonderen van prefixering. Zie Talen & vertaling voor het volledige gedrag. Met de hulpfuncties Router::langPrefix(), Router::typePrefix() en Router::url() kunt u correcte links opbouwen in elke taalinstelling.
Volgende stappen
Nog vastgelopen?
Open een ticket vanuit uw dashboard en ons team helpt u verder.