Signatur
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
truezurück, wenn die Route passt, sonstfalse. - 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;
// 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.