Signatur
Beschreibung
Yaf_Route_Rewrite ist eine Route-Klasse des Yaf-Frameworks (Yet Another Framework), die es ermöglicht, URL-Muster mit benannten Platzhaltern zu definieren und eingehende Anfragen darauf abzubilden. Dabei können Module, Controller und Aktionen sowohl im Muster als auch über Standardwerte festgelegt werden.
Das Muster wird mit Doppelpunkt-Syntax für Platzhalter definiert, z. B. /blog/:year/:month/:day. Diese Platzhalter werden dann automatisch als Route-Parameter extrahiert und stehen im Controller zur Verfügung. Zusätzlich können beliebige Default-Werte für nicht im Muster enthaltene Parameter übergeben werden.
Im Unterschied zu Yaf_Route_Regex, die vollständige reguläre Ausdrücke erfordert, bietet Yaf_Route_Rewrite eine lesbarere, entwicklerfreundlichere Schreibweise für typische REST-artige URL-Strukturen. Sie eignet sich besonders für saubere, SEO-freundliche URLs.
Routen werden über den Router (Yaf_Router) registriert, wobei die zuletzt hinzugefügte Route zuerst ausgewertet wird (LIFO-Prinzip). Greift keine definierte Route, fällt Yaf auf die Standard-Route zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $match Pflicht | string | Das URL-Muster mit benannten Platzhaltern, z. B. /news/:category/:id. Platzhalter beginnen mit einem Doppelpunkt und werden als Route-Parameter extrahiert. |
|
| $route Pflicht | array | Assoziatives Array mit den Ziel-Angaben für die Route. Mögliche Schlüssel sind module, controller und action, um das Routing-Ziel festzulegen. |
|
| $verify | array | [] | Optionales assoziatives Array mit Standardwerten für Platzhalter, die nicht in der URL enthalten sind. Schlüssel entsprechen den Platzhalter-Namen ohne Doppelpunkt. |
Rückgabewert
Beispiele
Einfache Rewrite-Route für Blog-Beiträge registrieren
<?php
// Bootstrap oder Routing-Konfiguration
$router = Yaf_Dispatcher::getInstance()->getRouter();
// Route: /blog/:year/:month/:id → BlogController::viewAction
$route = new Yaf_Route_Rewrite(
'/blog/:year/:month/:id',
[
'controller' => 'Blog',
'action' => 'view',
],
[
'year' => date('Y'),
'month' => date('m'),
]
);
$router->addRoute('blog_detail', $route);
// URL /blog/2024/06/42 → BlogController::viewAction()
// $request->getParam('year') === '2024'
// $request->getParam('month') === '06'
// $request->getParam('id') === '42'
Rewrite-Route mit Modul-Angabe und Fallback-Werten
<?php
$router = Yaf_Dispatcher::getInstance()->getRouter();
// Route für ein Admin-Modul: /admin/:controller/:action
$adminRoute = new Yaf_Route_Rewrite(
'/admin/:controller/:action',
[
'module' => 'Admin',
],
[
'controller' => 'Index',
'action' => 'index',
]
);
$router->addRoute('admin', $adminRoute);
// Zugriff auf /admin/user/list:
// → Admin-Modul, UserController::listAction()
// Zugriff auf /admin/ (ohne weiteres):
// → Admin-Modul, IndexController::indexAction() (Standardwerte greifen)
// Wichtig · Fallstricke
LIFO-Reihenfolge: Der Yaf_Router wertet Routen in umgekehrter Reihenfolge ihrer Registrierung aus. Spezifischere Routen sollten daher nach allgemeineren hinzugefügt werden, damit sie bevorzugt greifen.
Sicherheit: Platzhalter-Werte aus der URL werden nicht automatisch validiert oder gefiltert. Eingaben, die als Route-Parameter empfangen werden, sollten im Controller stets auf Gültigkeit geprüft werden, bevor sie weiterverwendet werden (z. B. als Datenbankparameter).
Yaf-Erweiterung erforderlich: Yaf_Route_Rewrite ist Teil der PECL-Erweiterung yaf. Sie steht nur zur Verfügung, wenn diese Erweiterung installiert und aktiviert ist (extension=yaf.so in der php.ini).