Start · Sprachen · PHP · Referenz · Yaf_Exception_LoadFailed_Action

Yaf_Exception_LoadFailed_Action

Klasse

Wird geworfen, wenn das Yaf-Framework eine Action-Klasse nicht laden oder finden kann.

seit PHP 2.1.0 Kategorie: misc

Signatur

class Yaf_Exception_LoadFailed_Action extends Yaf_Exception_LoadFailed

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();
}
Action konnte nicht geladen werden: Failed opening action script /path/to/application/actions/IndexTestAction.php

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.