Signatur
Beschreibung
Yaf_Exception ist die gemeinsame Basisklasse aller Ausnahmen, die das Yaf-Framework (Yet Another Framework) intern wirft. Sie erweitert PHPs eingebaute RuntimeException und stellt damit das vertraute Exception-Interface inklusive getMessage(), getCode(), getTrace() usw. bereit.
Alle spezifischeren Yaf-Ausnahmeklassen – wie Yaf_Exception_RouterFailed, Yaf_Exception_DispatchFailed, Yaf_Exception_LoadFailed oder Yaf_Exception_TypeError – erben von Yaf_Exception. Dadurch lassen sich mit einem einzigen catch (Yaf_Exception $e)-Block sämtliche Framework-Fehler abfangen.
Im Zusammenspiel mit der Yaf-Konfigurationsoption yaf.use_namespace steht die Klasse auch als Yaf\Exception (mit Namespace) zur Verfügung. Für die Fehlerbehandlung auf Anwendungsebene kann in der Bootstrap-Klasse oder im Controller die Methode Yaf_Application::app()->getLastErrorMsg() genutzt werden, alternativ kann eine eigene Exception-Handler-Methode im Controller definiert werden.
Eigene Anwendungs-Ausnahmen können von Yaf_Exception abgeleitet werden, um eine einheitliche Ausnahme-Hierarchie innerhalb eines Yaf-Projekts zu gewährleisten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $message | string | "" | Die menschenlesbare Fehlermeldung, die die Ausnahme beschreibt. |
| $code | int | 0 | Ein optionaler numerischer Fehlercode zur programmatischen Unterscheidung von Ausnahmen. |
| $previous | Throwable|null | null | Eine vorherige Ausnahme für Exception-Chaining (cause), die über getPrevious() abrufbar ist. |
Beispiele
Alle Yaf-Ausnahmen zentral abfangen
<?php
class IndexController extends Yaf_Controller_Abstract
{
public function indexAction()
{
// Simuliere einen Fehler im Framework-Kontext
throw new Yaf_Exception('Etwas ist schiefgelaufen.', 500);
}
/**
* Yaf ruft diese Methode automatisch auf, wenn eine Exception geworfen wird.
*/
public function error(Yaf_Exception $e)
{
echo 'Yaf-Fehler [' . $e->getCode() . ']: ' . $e->getMessage();
}
}
Eigene Ausnahmeklasse von Yaf_Exception ableiten
<?php
class MyApp_Exception extends Yaf_Exception
{
public function __construct(string $message, int $code = 0, ?Throwable $previous = null)
{
parent::__construct('[MyApp] ' . $message, $code, $previous);
}
}
try {
throw new MyApp_Exception('Datenbankverbindung fehlgeschlagen.', 503);
} catch (Yaf_Exception $e) {
// Fängt sowohl Yaf_Exception als auch alle abgeleiteten Klassen
echo get_class($e) . ': ' . $e->getMessage() . PHP_EOL;
echo 'Code: ' . $e->getCode() . PHP_EOL;
}
// Wichtig · Fallstricke
Namespace-Modus: Wenn in der php.ini die Option yaf.use_namespace = 1 gesetzt ist, lautet der Klassenname Yaf\Exception statt Yaf_Exception. Code, der beide Modi unterstützen soll, sollte dies berücksichtigen.
Automatische Fehlerbehandlung: Yaf fängt unbehandelte Yaf_Exception-Instanzen automatisch ab und leitet sie an die error()-Methode des aktiven Controllers weiter, sofern diese definiert ist. Wird keine solche Methode gefunden, gibt Yaf den Fehler über den konfigurierten Error-Handler aus.
Unterklassen: Für spezifischere Fehlerprüfungen empfiehlt es sich, konkrete Unterklassen wie Yaf_Exception_LoadFailed oder Yaf_Exception_DispatchFailed in den catch-Blöcken zu verwenden, bevor ein allgemeiner Yaf_Exception-Block greift.