Przejdź do treści
TubePress — bezpłatny, samodzielnie hostowany & aktywnie utrzymywany
Dokumentacja dla deweloperów

Routing

API routera TubePress: jak rejestrowane, dopasowywane i wysyłane są trasy front-endu, panelu i API, w tym parametry tras i metody HTTP.

TubePress używa małego, szybkiego routera zbudowanego wokół statycznej klasy Router. Kontrolery rejestrują swoje trasy w metodzie ::routes(), a public/index.php wywołuje te metody przed obsługą żądania. Ta strona zawiera wszystko, czego potrzebujesz, aby dodawać trasy z wtyczki lub rozumieć, w jaki sposób dopasowywane są żądania.

Rejestrowanie tras

Zarejestruj trasę za pomocą Router::get() lub Router::post(). Obsługą może być dowolny callable — domknięcie lub para [Class, 'method'].

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

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

Zgodnie z konwencją każdy kontroler udostępnia statyczną metodę routes(), która rejestruje wszystkie jego trasy, a metoda ta jest wywoływana raz przy starcie:

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

Parametry trasy

Używaj symboli zastępczych {name} w ścieżce; każdy dopasowuje jeden segment URL (wszystko poza /). Odczytuj wartość za pomocą Router::param().

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

Wewnętrznie wzorzec taki jak /promo/{code} jest kompilowany do wyrażenia regularnego (?P<code>[^/]+), więc parametry nigdy nie obejmują ukośników. Dokładne trasy są dopasowywane jako pierwsze, następnie parametryczne w kolejności rejestracji.

Wysyłanie odpowiedzi

MetodaZastosowanie
ThemeRenderer::render($tpl, $data)Renderuje stronę front-endu przez aktywny motyw.
Router::render($tpl, $data)Renderuje szablon panelu administracyjnego (templates/{$tpl}.php).
Router::json($data, $code = 200)Wysyła odpowiedź JSON i kończy działanie.
Router::redirect($url)Przekierowuje (i kończy działanie). Adresy URL front-endu są automatycznie poprzedzane aktywnym językiem/typem.

Kolejność tras i catch-all

Strony statyczne są obsługiwane przez catch-all /{slug}, więc kontroler stron jest rejestrowany jako ostatni w public/index.php — po wszystkich innych trasach front-endu, panelu administracyjnego i API. Jeśli rejestrujesz trasy z wtyczki podczas startu, są one dodawane przed catch-all i będą dopasowywane jako pierwsze.

Unikaj konfliktu z slugiem strony. Trasa wtyczki taka jak /deals zasłoni stronę statyczną pod adresem /deals. Użyj przestrzeni nazw dla tras wtyczek (na przykład /promo/deals), aby uniknąć problemów.

Ochrona CSRF

Każde żądanie POST zmieniające stan powinno być chronione przed CSRF. Router udostępnia pomocnicze funkcje:

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

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

verifyCsrf() akceptuje token z pola POST csrf_token lub nagłówka X-CSRF-Token i porównuje go za pomocą hash_equals().

Zlokalizowane i typowane adresy URL

W przypadku witryn wielojęzycznych router w sposób przezroczysty obsługuje prefiks języka (na przykład /fr/…) i tłumaczy znane slugi tras, więc /categorie/brunette jest rozpoznawane jako trasa category. Trasy panelu administracyjnego i instalacji są wyłączone — zarejestruj ścieżkę za pomocą Router::addNoPrefixPath(), jeśli chcesz wyłączyć niestandardową ścieżkę z prefiksowania. Zapoznaj się z Języki i tłumaczenia, aby poznać pełne działanie. Pomocnicze funkcje Router::langPrefix(), Router::typePrefix() i Router::url() umożliwiają budowanie poprawnych linków w dowolnym języku.

Następne kroki

Nadal masz problem?

Otwórz zgłoszenie z poziomu panelu, a nasz zespół Ci pomoże.

Wypróbuj demo na żywo → Pobierz TubePress →