Signatur
Beschreibung
Yaf_Exception_LoadFailed_Controller ist eine spezialisierte Ausnahme innerhalb der Yaf-Ausnahmehierarchie. Sie wird vom Yaf-Framework automatisch geworfen, wenn ein angeforderter Controller nicht gefunden oder nicht geladen werden kann – beispielsweise weil die entsprechende Controller-Datei im Anwendungsverzeichnis fehlt oder der Klassenname nicht korrekt definiert ist.
Die Klasse erbt von Yaf_Exception_LoadFailed, die wiederum von Yaf_Exception abstammt, welche selbst RuntimeException erweitert. Damit lässt sich diese Ausnahme sowohl gezielt als auch allgemein (über Elternklassen) abfangen.
Typische Ursachen für diese Ausnahme sind: fehlende Controller-Dateien im Verzeichnis application/controllers/, falsch geschriebene Controller-Klassen (z. B. fehlendes Controller-Suffix), oder eine fehlerhafte Namensraumkonfiguration innerhalb der Yaf-Anwendung.
Es empfiehlt sich, diese Ausnahme in der Bootstrap-Klasse oder einem zentralen Fehler-Handler abzufangen, um dem Benutzer eine aussagekräftige Fehlermeldung anstelle eines unkontrollierten Absturzes zu liefern.
Beispiele
Gezieltes Abfangen eines fehlenden Controllers
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract {
public function _initRoute(Yaf_Dispatcher $dispatcher) {
// Routen-Konfiguration
}
}
// In der index.php oder einem zentralen Dispatcher-Wrapper:
try {
$app = new Yaf_Application('/path/to/application.ini');
$app->bootstrap()->run();
} catch (Yaf_Exception_LoadFailed_Controller $e) {
// Spezifisch: Controller konnte nicht geladen werden
error_log('Controller nicht gefunden: ' . $e->getMessage());
header('HTTP/1.1 404 Not Found');
echo '404 – Die angeforderte Seite existiert nicht.';
} catch (Yaf_Exception $e) {
// Allgemeiner Yaf-Fehler
error_log('Yaf-Fehler: ' . $e->getMessage());
header('HTTP/1.1 500 Internal Server Error');
echo '500 – Interner Serverfehler.';
}
Prüfung der Ausnahmenhierarchie
<?php
// Ausnahme manuell erzeugen und Hierarchie prüfen
$e = new Yaf_Exception_LoadFailed_Controller('IndexController konnte nicht geladen werden.');
var_dump($e instanceof Yaf_Exception_LoadFailed_Controller); // bool(true)
var_dump($e instanceof Yaf_Exception_LoadFailed); // bool(true)
var_dump($e instanceof Yaf_Exception); // bool(true)
var_dump($e instanceof RuntimeException); // bool(true)
echo $e->getMessage();
// Wichtig · Fallstricke
Häufige Ursachen: Stellen Sie sicher, dass der Controller-Klassenname exakt dem Dateinamen entspricht und das Suffix Controller trägt (z. B. IndexController in der Datei IndexController.php). Yaf unterscheidet standardmäßig zwischen Groß- und Kleinschreibung, abhängig vom Betriebssystem.
Konfiguration: Über die INI-Option application.dispatcher.throwException lässt sich steuern, ob Yaf Ausnahmen wirft oder intern behandelt. Ist diese Option deaktiviert, wird stattdessen eine interne Fehlerbehandlung ausgelöst.