Enrutamiento
La API del enrutador de TubePress: cómo se registran, asocian y despachan las rutas del front-end, de administración y de la API, incluidos los parámetros de ruta y los métodos HTTP.
TubePress utiliza un enrutador pequeño y rápido construido alrededor de la clase estática Router. Los controladores registran sus rutas en un método ::routes(), y public/index.php llama a esos métodos antes de despachar la solicitud. Esta página cubre todo lo que necesitas para añadir rutas desde un plugin o entender cómo se emparejan las solicitudes.
Registrar rutas
Registra una ruta con Router::get() o Router::post(). El manejador puede ser cualquier callable: una closure o un par [Class, 'method'].
// Closure handler
Router::get('/promo', function () {
ThemeRenderer::render('promo', ['deal' => 'Summer']);
});
// Controller handler
Router::post('/promo/claim', [PromoController::class, 'claim']);Por convención, cada controlador expone un método estático routes() que registra todas sus rutas, y ese método se llama una vez al inicio:
class PromoController
{
public static function routes(): void
{
Router::get('/promo', [self::class, 'show']);
Router::post('/promo/claim', [self::class, 'claim']);
}
}Parámetros de ruta
Usa marcadores de posición {name} en la ruta; cada uno coincide con un único segmento de URL (todo excepto /). Lee el valor con Router::param().
Router::get('/promo/{code}', function () {
$code = Router::param('code'); // required
$ref = Router::param('ref', 'direct'); // with a default
// …
});Internamente, un patrón como /promo/{code} se compila a la expresión regular (?P<code>[^/]+), por lo que los parámetros nunca abarcan barras. Las rutas exactas se emparejan primero, luego las parametrizadas en orden de registro.
Enviar una respuesta
| Método | Uso |
|---|---|
ThemeRenderer::render($tpl, $data) | Renderiza una página de front-end a través del tema activo. |
Router::render($tpl, $data) | Renderiza una plantilla de administración (templates/{$tpl}.php). |
Router::json($data, $code = 200) | Envía una respuesta JSON y termina. |
Router::redirect($url) | Redirige (y termina). Las URLs de front-end se prefijan automáticamente con el idioma/tipo activo. |
Orden de rutas y la captura total
Las páginas estáticas son servidas por una captura total /{slug}, por lo que el controlador de páginas se registra al último en public/index.php — después de todas las demás rutas de front-end, administración y API. Si registras rutas desde un plugin durante el inicio, se añaden antes de la captura total y coincidirán primero.
/deals ocultará una página estática en /deals. Usa espacios de nombres en las rutas de plugin (por ejemplo /promo/deals) para estar seguro.Protección CSRF
Cada POST que modifique el estado debe estar protegido con CSRF. El enrutador proporciona los siguientes helpers:
// In your form template
<?= Router::csrfField() ?> // hidden input
// In your POST handler
if (!Router::verifyCsrf()) {
Router::json(['error' => 'Invalid token'], 403);
}verifyCsrf() acepta el token del campo POST csrf_token o del encabezado X-CSRF-Token, y lo compara con hash_equals().
URLs localizadas y tipadas
Para sitios multilingüe, el enrutador gestiona de forma transparente un prefijo de idioma (por ejemplo /fr/…) y traduce los slugs de ruta conocidos, de modo que /categorie/brunette se resuelve en la ruta category. Las rutas de administración e instalación están exentas: registra una ruta con Router::addNoPrefixPath() si necesitas excluir una ruta personalizada del prefijado. Consulta Idiomas y traducción para el comportamiento completo. Los helpers Router::langPrefix(), Router::typePrefix() y Router::url() te permiten construir enlaces correctos en cualquier localización.
Próximos pasos
¿Todavía con dudas?
Abre un ticket desde tu panel y nuestro equipo te ayudará.