Signatur
Beschreibung
Yaf_Route_Map ist ein Routing-Typ des Yaf-Frameworks (Yet Another Framework), der URI-Pfadsegmente direkt auf Controller und Actions abbildet. Dabei werden die URI-Segmente durch Trennzeichen (standardmäßig der Schrägstrich /) aufgeteilt und als hierarchische Zuordnung interpretiert.
Diese Klasse eignet sich besonders für Anwendungen, bei denen die URL-Struktur der Verzeichnis- oder Modulstruktur des Projekts entspricht. So wird z. B. der Pfad /user/profile automatisch auf den UserController mit der profileAction gemappt, ohne explizite Routen definieren zu müssen.
Der optionale Parameter $delimiter ermöglicht es, einen eigenen Trennstring zu definieren, ab dem der Rest des URI als Anfrageparameter behandelt wird. Damit lassen sich saubere URLs mit dynamischen Parametern kombinieren. Yaf_Route_Map kann sowohl für Controller-basiertes als auch für Action-basiertes Routing konfiguriert werden.
- Wird im Yaf-Router mit
Yaf_Router::addRoute()oder direkt im Bootstrap registriert. - Ermöglicht konventionsbasiertes Routing ohne manuelle Routendefinition für jede URL.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $controller_prefer | bool | false | Gibt an, ob der letzte URI-Bestandteil als Controller (true) oder als Action (false) interpretiert werden soll. |
| $delimiter | string | Ein optionaler Trennstring im URI. Alles nach diesem Trennzeichen wird als Schlüssel-Wert-Parameterpaar ausgewertet und nicht mehr für das Routing verwendet. |
Beispiele
Einfaches Controller/Action-Mapping via URI
<?php
// Bootstrap.php oder Konfiguration
class Bootstrap extends Yaf_Bootstrap_Abstract {
public function _initRoute(Yaf_Dispatcher $dispatcher) {
$router = $dispatcher->getRouter();
// URI /user/profile wird auf UserController::profileAction gemappt
$route = new Yaf_Route_Map();
$router->addRoute('map', $route);
}
}
// Zugriff via: http://example.com/user/profile
// => UserController::profileAction()
Map-Route mit eigenem Trennzeichen und Parametern
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract {
public function _initRoute(Yaf_Dispatcher $dispatcher) {
$router = $dispatcher->getRouter();
// URI: /blog/view--id/42
// "--" trennt Route von Parametern
// => BlogController::viewAction(), $_GET['id'] = 42
$route = new Yaf_Route_Map(false, '--');
$router->addRoute('blog_map', $route);
}
}
// Zugriff via: http://example.com/blog/view--id/42
// => BlogController::viewAction(), Parameter: id=42
Map-Route mit controller_prefer = true
<?php
// Mit controller_prefer=true wird der letzte Segment als Controller behandelt
$route = new Yaf_Route_Map(true);
// URI: /admin/user
// => AdminUser als Controller (nicht UserController::adminAction)
$router = Yaf_Dispatcher::getInstance()->getRouter();
$router->addRoute('prefer_controller', $route);
// Wichtig · Fallstricke
Yaf als PECL-Extension: Yaf_Route_Map ist Teil der Yaf-Extension, die als PECL-Paket installiert werden muss (pecl install yaf). Sie ist nicht in der PHP-Standardinstallation enthalten.
Reihenfolge der Routen: Routen werden im Yaf-Router in umgekehrter Registrierungsreihenfolge geprüft. Eine zu weit vorne registrierte Yaf_Route_Map-Route kann spezifischere Routen verdecken – daher sollte sie typischerweise als Fallback (d. h. zuerst registriert) verwendet werden.
Keine automatische Validierung: Yaf_Route_Map prüft nicht, ob der gemappte Controller oder die Action tatsächlich existieren. Fehlerbehandlung muss über den Yaf-Error-Handler oder eine Fallback-Route erfolgen.