Vai al contenuto
TubePress — gratuito, self-hosted & attivamente mantenuto
Riferimento per sviluppatori

Routing

L'API Router di TubePress: come le rotte front-end, admin e API vengono registrate, abbinate e instradate, inclusi i parametri di rotta e i metodi HTTP.

TubePress utilizza un router leggero e veloce costruito attorno alla classe statica Router. I controller registrano le proprie route in un metodo ::routes(), e public/index.php richiama questi metodi prima di smistare la richiesta. Questa pagina illustra tutto ciò che occorre per aggiungere route da un plugin o per capire come vengono associate le richieste.

Registrazione delle route

Registra una route con Router::get() o Router::post(). Il gestore può essere qualsiasi callable — una closure oppure una coppia [Class, 'method'].

// Closure handler
Router::get('/promo', function () {
    ThemeRenderer::render('promo', ['deal' => 'Summer']);
});

// Controller handler
Router::post('/promo/claim', [PromoController::class, 'claim']);

Per convenzione ogni controller espone un metodo statico routes() che registra tutte le proprie route; tale metodo viene richiamato una volta all'avvio:

class PromoController
{
    public static function routes(): void
    {
        Router::get('/promo', [self::class, 'show']);
        Router::post('/promo/claim', [self::class, 'claim']);
    }
}

Parametri di route

Usa i segnaposto {name} nel percorso; ciascuno corrisponde a un singolo segmento URL (tutto tranne /). Leggi il valore con Router::param().

Router::get('/promo/{code}', function () {
    $code = Router::param('code');          // required
    $ref  = Router::param('ref', 'direct'); // with a default
    // …
});

Internamente un pattern come /promo/{code} viene compilato nell'espressione regolare (?P<code>[^/]+), quindi i parametri non attraversano mai gli slash. Le route esatte vengono associate per prime, poi quelle con parametri nell'ordine di registrazione.

Invio di una risposta

MetodoUtilizzo
ThemeRenderer::render($tpl, $data)Renderizza una pagina front-end tramite il tema attivo.
Router::render($tpl, $data)Renderizza un template amministrativo (templates/{$tpl}.php).
Router::json($data, $code = 200)Invia una risposta JSON ed esce.
Router::redirect($url)Reindirizza (ed esce). Gli URL front-end vengono automaticamente prefissati con la lingua/tipo attivo.

Ordine delle route & catch-all

Le pagine statiche vengono servite da un catch-all /{slug}, quindi il controller delle pagine viene registrato per ultimo in public/index.php — dopo tutte le altre route front-end, admin e API. Se registri route da un plugin durante l'avvio, vengono aggiunte prima del catch-all e avranno la precedenza nella corrispondenza.

Evita conflitti con uno slug di pagina. Una route di plugin come /deals oscurerà una pagina statica su /deals. Assegna un namespace alle route del plugin (ad esempio /promo/deals) per sicurezza.

Protezione CSRF

Ogni POST che modifica lo stato dovrebbe essere protetto da CSRF. Il router fornisce gli helper:

// In your form template
<?= Router::csrfField() ?>          // hidden input

// In your POST handler
if (!Router::verifyCsrf()) {
    Router::json(['error' => 'Invalid token'], 403);
}

verifyCsrf() accetta il token dal campo POST csrf_token o dall'intestazione X-CSRF-Token, e lo confronta tramite hash_equals().

URL localizzati & tipizzati

Per i siti multilingua il router gestisce in modo trasparente un prefisso di lingua (ad esempio /fr/…) e traduce gli slug di route noti, così /categorie/brunette viene risolto come route category. Le route admin e di installazione sono esenti — registra un percorso con Router::addNoPrefixPath() se hai bisogno di escludere un percorso personalizzato dal prefisso. Consulta Lingue & traduzione per il comportamento completo. Gli helper Router::langPrefix(), Router::typePrefix() e Router::url() consentono di costruire link corretti in qualsiasi lingua.

Passi successivi

Ancora bloccato?

Apri un ticket dalla tua dashboard e il nostro team ti aiuterà.

Prova la demo live → Scarica TubePress →