Routage
L’API Router de TubePress : comment les routes front-end, admin et API sont enregistrées, mises en correspondance et acheminées, y compris les paramètres de route et les méthodes HTTP.
TubePress utilise un routeur léger et rapide construit autour de la classe statique Router. Les contrôleurs enregistrent leurs routes dans une méthode ::routes(), et public/index.php appelle ces méthodes avant de distribuer la requête. Cette page couvre tout ce dont vous avez besoin pour ajouter des routes depuis un plugin ou comprendre comment les requêtes sont associées.
Enregistrement des routes
Enregistrez une route avec Router::get() ou Router::post(). Le gestionnaire est n'importe quel callable — une closure ou une paire [Class, 'method'].
// Closure handler
Router::get('/promo', function () {
ThemeRenderer::render('promo', ['deal' => 'Summer']);
});
// Controller handler
Router::post('/promo/claim', [PromoController::class, 'claim']);Par convention, chaque contrôleur expose une méthode statique routes() qui enregistre toutes ses routes, et cette méthode est appelée une seule fois au démarrage :
class PromoController
{
public static function routes(): void
{
Router::get('/promo', [self::class, 'show']);
Router::post('/promo/claim', [self::class, 'claim']);
}
}Paramètres de route
Utilisez des espaces réservés {name} dans le chemin ; chacun correspond à un seul segment d'URL (tout sauf /). Lisez la valeur avec Router::param().
Router::get('/promo/{code}', function () {
$code = Router::param('code'); // required
$ref = Router::param('ref', 'direct'); // with a default
// …
});En interne, un motif tel que /promo/{code} est compilé vers la regex (?P<code>[^/]+), donc les paramètres ne s'étendent jamais sur des barres obliques. Les routes exactes sont associées en premier, puis les routes paramétrées dans l'ordre d'enregistrement.
Envoi d'une réponse
| Méthode | Utilisation |
|---|---|
ThemeRenderer::render($tpl, $data) | Affiche une page frontale via le thème actif. |
Router::render($tpl, $data) | Affiche un template d'administration (templates/{$tpl}.php). |
Router::json($data, $code = 200) | Envoie une réponse JSON et termine. |
Router::redirect($url) | Redirige (et termine). Les URLs frontales sont automatiquement préfixées avec la langue/le type actif. |
Ordre des routes & route attrape-tout
Les pages statiques sont servies par une route attrape-tout /{slug}, donc le contrôleur de page est enregistré en dernier dans public/index.php — après toutes les autres routes frontales, d'administration et API. Si vous enregistrez des routes depuis un plugin au démarrage, elles sont ajoutées avant la route attrape-tout et seront associées en premier.
/deals masquera une page statique à /deals. Utilisez un espace de noms pour les routes de plugin (par exemple /promo/deals) pour éviter les conflits.Protection CSRF
Tout POST modifiant l'état doit être protégé par CSRF. Le routeur fournit les helpers :
// In your form template
<?= Router::csrfField() ?> // hidden input
// In your POST handler
if (!Router::verifyCsrf()) {
Router::json(['error' => 'Invalid token'], 403);
}verifyCsrf() accepte le jeton depuis le champ POST csrf_token ou l'en-tête X-CSRF-Token, et le compare avec hash_equals().
URLs localisées & typées
Pour les sites multilingues, le routeur gère de manière transparente un préfixe de langue (par exemple /fr/…) et traduit les slugs de route connus, ainsi /categorie/brunette se résout en route category. Les routes d'administration et d'installation sont exemptées — enregistrez un chemin avec Router::addNoPrefixPath() si vous devez exclure un chemin personnalisé du préfixage. Consultez Langues & traduction pour le comportement complet. Les helpers Router::langPrefix(), Router::typePrefix() et Router::url() vous permettent de construire des liens corrects dans n'importe quel locale.
Étapes suivantes
Toujours bloqué ?
Ouvrez un ticket depuis votre tableau de bord et notre équipe vous assistera.