Start · Sprachen · PHP · Referenz · Yaf_Exception_RouterFailed

Yaf_Exception_RouterFailed

Klasse

Wird ausgelöst, wenn das Routing einer HTTP-Anfrage im Yaf-Framework fehlschlägt und keine passende Route gefunden werden kann.

seit PHP 2.0.0 Kategorie: misc

Signatur

class Yaf_Exception_RouterFailed extends Yaf_Exception

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_RouterFailedYaf_ExceptionRuntimeExceptionException

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.