Ga naar inhoud
TubePress — gratis, zelf gehost & actief onderhouden
Ontwikkelaarsreferentie

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

MethodeGebruik
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.

Vermijd conflicten met een paginaslug. Een pluginroute zoals /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.

Probeer de live demo → TubePress downloaden →