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
| Metodo | Utilizzo |
|---|---|
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.
/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à.