Start · Sprachen · PHP · Referenz · Yaf_Route_Map

Yaf_Route_Map

Klasse

Routet HTTP-Anfragen anhand einer festgelegten URI-zu-Controller/Action-Zuordnung (Routen-Map).

seit PHP 2.3.0 Kategorie: misc

Signatur

class Yaf_Route_Map implements Yaf_Route_Interface

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.