Start · Sprachen · PHP · Referenz · Yaf_Route_Rewrite

Yaf_Route_Rewrite

Klasse

Routet HTTP-Anfragen anhand flexibler Rewrite-Regeln mit benannten Platzhaltern und optionalen Standardwerten.

seit PHP 2.2.9 Kategorie: misc

Signatur

class Yaf_Route_Rewrite extends Yaf_Route_Interface

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

Typ

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).