رفتن به محتوا

بهترین شیوه های مدیریت خطا

بهترین روش‌های مدیریت خطا در XOOPS

Section titled “بهترین روش‌های مدیریت خطا در XOOPS”

مدیریت صحیح خطا برای قابلیت اطمینان برنامه، اشکال زدایی و تجربه کاربر بسیار مهم است.

<?php
// Base exception
class 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 exceptions
class 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;
}
?>

الگوهای گرفتن را امتحان کنید

Section titled “الگوهای گرفتن را امتحان کنید”
<?php
class 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');
}
}
}
?>
<?php
class 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);
}
}
?>

پیام های خطای کاربر پسند

Section titled “پیام های خطای کاربر پسند”
<?php
class 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;
}
}
?>
<?php
class 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),
];
}
}
}
?>
  • انواع استثناهای خاص ایجاد کنید
  • زود پرتاب کن دیر بگیر
  • ورود همه استثناها با زمینه
  • ارائه پیام های کاربر پسند
  • از فرمت پاسخ خطای ثابت استفاده کنید
  • تست مسیرهای رسیدگی به خطا
  • اطلاعات حساس را در اختیار کاربران قرار ندهید

همچنین ببینید:

  • کد سازمان برای ساختار پروژه
  • تست برای استراتژی های تست خطا
  • ../Patterns/Service-Layer برای استثناهای خدمات

برچسب‌ها: #بهترین روشها #مدیریت خطا #استثناها # ثبت گزارش #توسعه ماژول