Start · Sprachen · PHP · Referenz · Yaf_Route_Interface

Yaf_Route_Interface

Interface

Schnittstelle, die von allen Yaf-Routen implementiert werden muss, um eigene Routing-Strategien im Yaf-Framework zu definieren.

seit PHP 2.0.0 Kategorie: misc

Signatur

interface Yaf_Route_Interface

Beschreibung

Yaf_Route_Interface ist die grundlegende Schnittstelle im Yet Another Framework (Yaf), die jede benutzerdefinierte Route implementieren muss. Sie legt den Vertrag fest, den das Yaf-Routing-System erwartet, damit Routen korrekt verarbeitet und URLs generiert werden können.

Die Schnittstelle definiert zwei Methoden: route() und assemble(). Die Methode route() ist dafür zuständig, eine eingehende Anfrage (Yaf_Request_Abstract) zu analysieren und, falls die Route passt, den Controller, die Action und Parameter in der Anfrage zu setzen. Die Methode assemble() ermöglicht die umgekehrte Richtung: Sie erzeugt aus übergebenen Parametern eine URL.

Durch die Implementierung dieser Schnittstelle können Entwickler vollständig eigene Routing-Logiken erstellen, z. B. REST-konforme Routen, sprachbasiertes Routing oder reguläre Ausdrücke mit komplexer Logik, die über die eingebauten Yaf-Routen hinausgeht. Die eigene Klasse wird dann mit Yaf_Router::addRoute() im Router registriert.

  • route(Yaf_Request_Abstract $request): bool — Versucht, die Anfrage zu routen. Gibt true zurück, wenn die Route passt, sonst false.
  • assemble(array $info, array $query = null): string — Generiert eine URL aus den übergebenen Routing-Informationen und optionalen Query-Parametern.

Beispiele

Eigene Route implementieren und registrieren

<?php
class MyCustomRoute implements Yaf_Route_Interface
{
    public function route(Yaf_Request_Abstract $request): bool
    {
        $uri = $request->getRequestUri();

        // Beispiel: Routen alle Anfragen, die mit /api/ beginnen
        if (strpos($uri, '/api/') === 0) {
            $parts = explode('/', trim($uri, '/'));
            // $parts[0] = 'api', $parts[1] = Controller, $parts[2] = Action
            $controller = isset($parts[1]) ? ucfirst($parts[1]) : 'Index';
            $action     = isset($parts[2]) ? $parts[2] : 'index';

            $request->setControllerName($controller);
            $request->setActionName($action);
            $request->setRouted(true);
            return true;
        }

        return false;
    }

    public function assemble(array $info, array $query = null): string
    {
        $controller = strtolower($info[':controller'] ?? 'index');
        $action     = strtolower($info[':action'] ?? 'index');
        $url        = '/api/' . $controller . '/' . $action;

        if (!empty($query)) {
            $url .= '?' . http_build_query($query);
        }

        return $url;
    }
}

// Route im Bootstrap oder Application-Initialisierung registrieren:
$router = Yaf_Dispatcher::getInstance()->getRouter();
$router->addRoute('api', new MyCustomRoute());

URL mit assemble() generieren

<?php
$route = new MyCustomRoute();

$url = $route->assemble(
    [':controller' => 'user', ':action' => 'profile'],
    ['id' => 42, 'lang' => 'de']
);

echo $url;
/api/user/profile?id=42&lang=de

// Wichtig · Fallstricke

Hinweis zur Yaf-Extension: Yaf ist eine PECL-Extension und muss separat installiert und in der php.ini aktiviert werden (extension=yaf.so). Sie ist nicht Teil der PHP-Standardinstallation.

Die Methode route() muss zwingend true zurückgeben, wenn die Route auf die Anfrage passt — andernfalls wird die nächste Route im Router getestet. Ein vergessenes return true führt zu schwer nachvollziehbaren Routing-Fehlern.

Ab neueren Yaf-Versionen (3.x) wurde die interne API leicht angepasst. Die Signatur von assemble() kann je nach Yaf-Version variieren — bei der Portierung auf Yaf 3.x sollte die Kompatibilität geprüft werden.