Signatur
Beschreibung
Yaf_Exception_RouterFailed ist eine spezialisierte Ausnahme im Yet Another Framework (Yaf), die immer dann geworfen wird, wenn der Router keine passende Route für die aktuelle HTTP-Anfrage ermitteln konnte. Sie erbt von Yaf_Exception, die wiederum von der nativen PHP-Klasse RuntimeException abstammt.
Im normalen Betrieb eines Yaf-Projekts durchläuft jede eingehende Anfrage den Yaf_Router, der versucht, die URL auf einen Controller und eine Action abzubilden. Gelingt das nicht – etwa weil keine der konfigurierten Routen passt – wirft Yaf diese Ausnahme, bevor die Dispatch-Phase beginnt.
Um Routing-Fehler elegant abzufangen, kann die Ausnahme im Bootstrap, in einem Plugin (Methode routerShutdown) oder im globalen Exception-Handler des Yaf-Dispatchers behandelt werden. So lassen sich benutzerfreundliche Fehlerseiten oder alternative Weiterleitungen realisieren.
- Typischer Auslöser: keine passende Route in der Routing-Konfiguration
- Weitere Auslöser: fehlerhafte Route-Parameter oder leere Routen-Tabelle
- Erbhierarchie:
Yaf_Exception_RouterFailed→Yaf_Exception→RuntimeException→Exception
Beispiele
Routing-Fehler im Dispatcher abfangen
<?php
// Bootstrap oder Plugin-Methode routerShutdown
class ErrorPlugin extends Yaf_Plugin_Abstract
{
public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response): void
{
// Wird aufgerufen, nachdem das Routing abgeschlossen ist.
// Ein Routing-Fehler lässt sich hier noch nicht als Exception abfangen;
// stattdessen prüft man das Request-Objekt.
if (!$request->isRouted()) {
// Anfrage konnte nicht geroutet werden – Fehlerbehandlung
$request->setControllerName('Error');
$request->setActionName('notfound');
}
}
}
Globaler Exception-Handler für Yaf_Exception_RouterFailed
<?php
// index.php / Bootstrap
$app = new Yaf_Application(APPLICATION_PATH . '/conf/application.ini');
try {
$app->bootstrap()->run();
} catch (Yaf_Exception_RouterFailed $e) {
// Spezifische Behandlung von Routing-Fehlern
http_response_code(404);
echo '<h1>404 – Seite nicht gefunden</h1>';
echo '<p>Die angeforderte URL konnte keiner Route zugeordnet werden.</p>';
// Optionale Debug-Ausgabe (nur im Entwicklungsmodus!)
if (defined('YAF_DEBUG') && YAF_DEBUG) {
echo '<pre>' . htmlspecialchars($e->getMessage()) . '</pre>';
}
} catch (Yaf_Exception $e) {
// Alle anderen Yaf-Ausnahmen
http_response_code(500);
echo '<h1>Interner Serverfehler</h1>';
}
// Wichtig · Fallstricke
Hinweis zur Yaf-Konfiguration: Wenn yaf.use_namespace aktiviert ist, steht die Klasse unter dem Namespace-Namen Yaf\Exception\RouterFailed zur Verfügung.
Standardmäßig fängt Yaf Ausnahmen intern ab und leitet sie an den Error-Controller weiter, sofern application.dispatcher.catchException in der INI auf 1 gesetzt ist. In diesem Fall erreicht die Ausnahme den äußeren try/catch-Block nicht, sondern wird über den normalen Dispatch-Mechanismus behandelt.
Yaf ist eine PECL-Extension (pecl install yaf) und kein Bestandteil der PHP-Standardbibliothek. Die Klassen stehen nur zur Verfügung, wenn die Extension geladen ist.