Routing
Die TubePress Router-API: Wie Frontend-, Admin- und API-Routen registriert, abgeglichen und weitergeleitet werden, einschließlich Routenparametern und HTTP-Methoden.
TubePress verwendet einen kleinen, schnellen Router, der auf der statischen Router-Klasse aufbaut. Controller registrieren ihre Routen in einer ::routes()-Methode, und public/index.php ruft diese Methoden auf, bevor die Anfrage weitergeleitet wird. Diese Seite erklärt alles, was Sie benötigen, um Routen aus einem Plugin hinzuzufügen oder zu verstehen, wie Anfragen abgeglichen werden.
Routen registrieren
Registrieren Sie eine Route mit Router::get() oder Router::post(). Der Handler ist ein beliebiges Callable — ein Closure oder ein [Class, 'method']-Paar.
// Closure handler
Router::get('/promo', function () {
ThemeRenderer::render('promo', ['deal' => 'Summer']);
});
// Controller handler
Router::post('/promo/claim', [PromoController::class, 'claim']);Per Konvention stellt jeder Controller eine statische routes()-Methode bereit, die alle seine Routen registriert, und diese Methode wird einmal beim Start aufgerufen:
class PromoController
{
public static function routes(): void
{
Router::get('/promo', [self::class, 'show']);
Router::post('/promo/claim', [self::class, 'claim']);
}
}Routenparameter
Verwenden Sie {name}-Platzhalter im Pfad; jeder entspricht einem einzelnen URL-Segment (alles außer /). Den Wert können Sie mit Router::param() lesen.
Router::get('/promo/{code}', function () {
$code = Router::param('code'); // required
$ref = Router::param('ref', 'direct'); // with a default
// …
});Intern wird ein Muster wie /promo/{code} zu dem Regex (?P<code>[^/]+) kompiliert, sodass Parameter nie Schrägstriche überspannen. Exakte Routen werden zuerst abgeglichen, danach parametrisierte in Registrierungsreihenfolge.
Eine Antwort senden
| Methode | Verwendung |
|---|---|
ThemeRenderer::render($tpl, $data) | Rendert eine Frontend-Seite über das aktive Theme. |
Router::render($tpl, $data) | Rendert ein Admin-Template (templates/{$tpl}.php). |
Router::json($data, $code = 200) | Sendet eine JSON-Antwort und beendet die Ausführung. |
Router::redirect($url) | Leitet weiter (und beendet). Frontend-URLs werden automatisch mit der aktiven Sprache/dem aktiven Typ vorangestellt. |
Reihenfolge der Routen & der Catch-All
Statische Seiten werden über einen /{slug}-Catch-All bereitgestellt, daher wird der Seiten-Controller zuletzt in public/index.php registriert — nach allen anderen Frontend-, Admin- und API-Routen. Wenn Sie Routen aus einem Plugin beim Start registrieren, werden sie vor dem Catch-All hinzugefügt und werden zuerst abgeglichen.
/deals überschattet eine statische Seite unter /deals. Benennen Sie Plugin-Routen in einem Namensraum (zum Beispiel /promo/deals), um sicher zu sein.CSRF-Schutz
Jeder zustandsverändernde POST sollte CSRF-geschützt sein. Der Router stellt dafür folgende Hilfsfunktionen bereit:
// In your form template
<?= Router::csrfField() ?> // hidden input
// In your POST handler
if (!Router::verifyCsrf()) {
Router::json(['error' => 'Invalid token'], 403);
}verifyCsrf() akzeptiert das Token aus dem csrf_token-POST-Feld oder dem X-CSRF-Token-Header und vergleicht es mit hash_equals().
Lokalisierte & typisierte URLs
Für mehrsprachige Websites verarbeitet der Router transparent ein Sprachpräfix (zum Beispiel /fr/…) und übersetzt bekannte Routen-Slugs, sodass /categorie/brunette zur category-Route aufgelöst wird. Admin- und Installationsrouten sind ausgenommen — registrieren Sie einen Pfad mit Router::addNoPrefixPath(), wenn Sie einen benutzerdefinierten Pfad vom Präfixieren ausnehmen möchten. Das vollständige Verhalten ist unter Sprachen & Übersetzung beschrieben. Hilfsfunktionen wie Router::langPrefix(), Router::typePrefix() und Router::url() ermöglichen es Ihnen, korrekte Links in jeder Sprache zu erstellen.
Nächste Schritte
Noch Hilfe benötigt?
Erstellen Sie ein Ticket in Ihrem Dashboard und unser Team hilft Ihnen gerne weiter.