Signatur
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.