Start · Sprachen · PHP · Referenz · Yaf_Exception_DispatchFailed

Yaf_Exception_DispatchFailed

Klasse

Wird geworfen, wenn das Dispatching einer Anfrage im Yaf-Framework fehlschlägt.

seit PHP 2.0.0 Kategorie: misc

Signatur

class Yaf_Exception_DispatchFailed extends Yaf_Exception

Beschreibung

Yaf_Exception_DispatchFailed ist eine spezialisierte Ausnahme des Yaf-Frameworks (Yet Another Framework), die geworfen wird, wenn der Dispatch-Prozess einer HTTP-Anfrage nicht erfolgreich abgeschlossen werden kann. Dies tritt typischerweise auf, wenn der Router zwar eine Route gefunden hat, der zugehörige Controller oder die Action aber nicht korrekt ausgeführt werden konnte.

Die Klasse erbt von Yaf_Exception, welche wiederum von der eingebauten PHP-Klasse RuntimeException abstammt. Dadurch stehen alle üblichen Ausnahme-Methoden wie getMessage(), getCode() und getTrace() zur Verfügung.

Typische Ursachen für diese Ausnahme sind fehlende Controller-Dateien, nicht existierende Action-Methoden oder Fehler, die während der Initialisierung des Controllers auftreten. Im Produktivbetrieb sollte diese Ausnahme abgefangen und in eine benutzerfreundliche Fehlerseite umgewandelt werden.

  • Fehlender oder nicht ladbarer Controller
  • Nicht vorhandene Action-Methode
  • Fehler im Plugin-Hook vor oder nach dem Dispatching

Beispiele

Abfangen einer DispatchFailed-Ausnahme im Bootstrap

<?php
class Bootstrap extends Yaf_Bootstrap_Abstract {
    public function _initPlugin(Yaf_Dispatcher $dispatcher) {
        // Plugin registrieren, das Dispatch-Fehler abfängt
        $dispatcher->registerPlugin(new ErrorPlugin());
    }
}

class ErrorPlugin extends Yaf_Plugin_Abstract {
    public function dispatchLoopShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        // Wird nach dem Dispatch-Loop ausgeführt
    }
}

// In der index.php / Bootstrap-Einstiegsdatei:
try {
    $app = new Yaf_Application('/path/to/conf/application.ini');
    $app->bootstrap()->run();
} catch (Yaf_Exception_DispatchFailed $e) {
    // Dispatch-Fehler gezielt behandeln
    header('HTTP/1.1 500 Internal Server Error');
    echo 'Dispatch-Fehler: ' . htmlspecialchars($e->getMessage());
} catch (Yaf_Exception $e) {
    // Allgemeine Yaf-Ausnahmen
    echo 'Yaf-Fehler: ' . htmlspecialchars($e->getMessage());
}

Manuelles Auslösen einer DispatchFailed-Ausnahme

<?php
class IndexController extends Yaf_Controller_Abstract {
    public function indexAction() {
        $moduleEnabled = false;

        if (!$moduleEnabled) {
            // Dispatch explizit als fehlgeschlagen markieren
            throw new Yaf_Exception_DispatchFailed(
                'Das angeforderte Modul ist deaktiviert.',
                Yaf_Exception_DispatchFailed::DISPATCH_FAILED
            );
        }

        // Normale Verarbeitung...
    }
}

// Abfangen im globalen Exception-Handler:
set_exception_handler(function (Throwable $e) {
    if ($e instanceof Yaf_Exception_DispatchFailed) {
        http_response_code(503);
        echo 'Der Dienst ist vorübergehend nicht verfügbar.';
    }
});

// Wichtig · Fallstricke

Yaf ist eine PECL-Erweiterung und muss separat installiert werden (pecl install yaf). Sie ist nicht im PHP-Kern enthalten. Die Verfügbarkeit der Klasse hängt davon ab, ob die Erweiterung geladen ist.

Im Produktivbetrieb sollte yaf.use_namespace = 0 (oder 1 für Namespace-Modus) korrekt konfiguriert sein, da dies die Klassennamen beeinflusst. Im Namespace-Modus lautet die Klasse Yaf\Exception\DispatchFailed.

Fehlermeldungen aus dieser Ausnahme sollten niemals ungefiltert an den Endnutzer ausgegeben werden, da sie interne Pfade und Architekturinformationen enthalten können.