Best Practices für Fehlerbehandlung
Best Practices für Fehlerbehandlung in XOOPS
Abschnitt betitelt „Best Practices für Fehlerbehandlung in XOOPS“Eine ordnungsgemäße Fehlerbehandlung ist für die Anwendungszuverlässigkeit, das Debugging und die Benutzererfahrung entscheidend.
Ausnahmehierarchie
Abschnitt betitelt „Ausnahmehierarchie“<?php// Base exceptionclass ModuleException extends \Exception{ protected $statusCode = 500;
public function __construct($message = '', $code = 0, $statusCode = 500) { parent::__construct($message, $code); $this->statusCode = $statusCode; }
public function getStatusCode() { return $this->statusCode; }}
// Specific exceptionsclass ValidationException extends ModuleException{ protected $statusCode = 400; private $errors = [];
public function __construct($message, $errors = []) { parent::__construct($message, 0, 400); $this->errors = $errors; }
public function getErrors() { return $this->errors; }}
class NotFoundException extends ModuleException{ protected $statusCode = 404;}
class UnauthorizedException extends ModuleException{ protected $statusCode = 403;}?>Try-Catch-Muster
Abschnitt betitelt „Try-Catch-Muster“<?phpclass UserService{ public function createUser($username, $email, $password) { try { // Validate $this->validate($username, $email, $password);
// Create user $user = new User(); $user->setUsername($username); $user->setEmail($email); $user->setPassword($password);
// Save $userId = $this->userRepository->save($user);
return $userId;
} catch (ValidationException $e) { \xoops_logger()->error($e->getMessage()); throw $e;
} catch (\Exception $e) { \xoops_logger()->critical($e->getMessage()); throw new \RuntimeException('Failed to create user'); } }}?>Fehler protokollieren
Abschnitt betitelt „Fehler protokollieren“<?phpclass ErrorHandler{ public static function logError($message, $context = []) { \xoops_logger()->error($message, $context); }
public static function logException(\Exception $e) { $context = [ 'exception' => get_class($e), 'file' => $e->getFile(), 'line' => $e->getLine(), 'trace' => $e->getTraceAsString(), ];
\xoops_logger()->critical($e->getMessage(), $context); }}?>Benutzerfreundliche Fehlermeldungen
Abschnitt betitelt „Benutzerfreundliche Fehlermeldungen“<?phpclass ErrorHandler{ public static function getUserMessage(\Exception $e) { switch (true) { case $e instanceof ValidationException: return $e->getMessage();
case $e instanceof NotFoundException: return 'The requested resource was not found.';
case $e instanceof UnauthorizedException: return 'You do not have permission.';
default: return 'An unexpected error occurred.'; } }
public static function getStatusCode(\Exception $e) { if (method_exists($e, 'getStatusCode')) { return $e->getStatusCode(); } return 500; }}?>Fehlerbehandlung im Controller
Abschnitt betitelt „Fehlerbehandlung im Controller“<?phpclass UserController{ public function registerAction() { try { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { return []; }
$userId = $this->userService->register( $_POST['username'], $_POST['email'], $_POST['password'] );
return ['success' => true, 'userId' => $userId];
} catch (\Exception $e) { ErrorHandler::logException($e);
return [ 'success' => false, 'message' => ErrorHandler::getUserMessage($e), 'statusCode' => ErrorHandler::getStatusCode($e), ]; } }}?>Best Practices
Abschnitt betitelt „Best Practices“- Erstellen Sie spezifische Ausnahmetypen
- Werfen Sie früh, fangen Sie spät
- Protokollieren Sie alle Ausnahmen mit Kontext
- Stellen Sie benutzerfreundliche Meldungen bereit
- Verwenden Sie ein konsistentes Fehlerantwortformat
- Testen Sie Fehlerbehandlungspfade
- Geben Sie keine sensiblen Informationen an Benutzer weiter
Verwandte Dokumentation
Abschnitt betitelt „Verwandte Dokumentation“Siehe auch:
- Code-Organization für Projektstruktur
- Testing für Fehler-Test-Strategien
- ../Patterns/Service-Layer für Service-Ausnahmen
Tags: #best-practices #error-handling #exceptions #logging #module-development