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
| Metoda | Zastosowanie |
|---|---|
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.
/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.