Signatur
Beschreibung
Yaf_Exception_LoadFailed_Action ist eine spezialisierte Ausnahme innerhalb der Yaf-Ausnahmehierarchie und wird ausgelöst, wenn das Yaf-Framework versucht, eine Action-Klasse zu laden, dies jedoch fehlschlägt – etwa weil die entsprechende Datei nicht gefunden wurde oder die Klasse darin nicht definiert ist.
Diese Klasse erbt von Yaf_Exception_LoadFailed, die wiederum von Yaf_Exception erbt. Dadurch kann sie entweder gezielt mit catch (Yaf_Exception_LoadFailed_Action $e) oder allgemeiner mit catch (Yaf_Exception_LoadFailed $e) bzw. catch (Yaf_Exception $e) abgefangen werden.
Im Yaf-Framework werden Actions in Controller-Klassen definiert oder als eigenständige Action-Klassen in separaten Dateien gespeichert. Wenn eine solche Datei fehlt oder die erwartete Action-Klasse nicht enthält, wirft das Framework diese Ausnahme. Sie ist besonders nützlich beim Debuggen von Routing- und Dispatch-Fehlern.
Da Yaf standardmäßig Ausnahmen deaktiviert und stattdessen Fehler auslöst, muss yaf.use_spl_autoload bzw. die Ausnahme-Behandlung in der Konfiguration aktiviert sein, damit diese Klasse effektiv abgefangen werden kann.
Beispiele
Gezieltes Abfangen einer fehlenden Action-Klasse
<?php
// Bootstrap oder index.php
$app = new Yaf_Application('/path/to/conf/application.ini');
try {
$app->run();
} catch (Yaf_Exception_LoadFailed_Action $e) {
// Wird geworfen, wenn z. B. IndexController::testAction nicht existiert
// und auch keine eigenständige IndexTestAction-Klasse gefunden wurde
echo 'Action konnte nicht geladen werden: ' . $e->getMessage();
} catch (Yaf_Exception_LoadFailed $e) {
echo 'Laden fehlgeschlagen (allgemein): ' . $e->getMessage();
} catch (Yaf_Exception $e) {
echo 'Yaf-Fehler: ' . $e->getMessage();
}
Eigene Fehlerseite bei nicht gefundener Action
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract {
public function _initExceptionHandler(Yaf_Dispatcher $dispatcher) {
// Ausnahme-Modus aktivieren
$dispatcher->throwException(true);
$dispatcher->catchException(false);
}
}
// In einem übergeordneten Controller oder Error-Handler:
try {
Yaf_Dispatcher::getInstance()->dispatch(new Yaf_Request_Http());
} catch (Yaf_Exception_LoadFailed_Action $e) {
http_response_code(404);
echo '<h1>404 – Seite nicht gefunden</h1>';
echo '<p>Die angeforderte Action existiert nicht.</p>';
// Optional: Logging
error_log('[Yaf] LoadFailed_Action: ' . $e->getMessage());
}
// Wichtig · Fallstricke
Konfiguration beachten: Yaf wirft standardmäßig keine Ausnahmen, sondern triggert PHP-Fehler. Um Yaf_Exception_LoadFailed_Action abfangen zu können, muss der Ausnahme-Modus über Yaf_Dispatcher::throwException(true) oder die INI-Option yaf.throw_exception = On aktiviert werden.
Klassennamen-Konvention: Yaf erwartet, dass Action-Klassen einer strengen Namenskonvention folgen (z. B. IndexTestAction für die test-Action des Index-Controllers). Abweichungen davon führen direkt zu dieser Ausnahme.
Dateipfade: Eigenständige Action-Dateien werden standardmäßig im Verzeichnis application/actions/ oder direkt im Controller-Verzeichnis gesucht. Ein falscher application.directory-Pfad in der Konfiguration ist eine häufige Ursache für diese Ausnahme.