在 Webman 中,控制错误返回可以通过全局异常处理器(ExceptionHandler
)来处理。你可以自定义异常处理逻辑,根据不同的异常类型或错误,返回不同的 HTTP 响应状态码和错误信息。以下是一个实现方式的示例:
1.自定义全局异常处理器
你可以定义自己的异常处理器,例如创建一个 app/exception/Handler.php
,继承 Webman 提供的 ExceptionHandlerInterface
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| <?php namespace app\exception;
use Throwable; use Webman\Http\Response; use Webman\Http\Request; use Webman\Exception\ExceptionHandlerInterface;
class Handler implements ExceptionHandlerInterface { public $dontReport = [ \Illuminate\Validation\ValidationException::class, \app\exception\BusinessException::class, ];
public function render(Request $request, Throwable $exception): Response { if ($exception instanceof \app\exception\BusinessException) { return response(json(['error' => $exception->getMessage()], 400)); }
return response(json(['error' => 'Server Error'], 500)); }
public function report(Throwable $exception) { if (!$this->shouldntReport($exception)) { echo $exception; } }
protected function shouldntReport(Throwable $exception): bool { foreach ($this->dontReport as $type) { if ($exception instanceof $type) { return true; } } return false; } }
|
2.在配置文件中指定异常处理器
在 config/exception.php
中,你可以指定这个异常处理器:
1 2 3
| return [ 'exception_handler' => app\exception\Handler::class, ];
|
3.自定义异常类
你可以根据需求定义自己的业务异常类,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php namespace app\exception;
use Exception;
class BusinessException extends Exception { public function __construct($message = "业务逻辑异常", $code = 400) { parent::__construct($message, $code); } }
|
4.返回自定义错误响应
当某个操作出现业务错误时,你可以抛出自定义异常,比如:
1 2 3 4
| use app\exception\BusinessException;
throw new BusinessException("自定义的业务错误信息", 400);
|
这样,Webman 会根据你在全局异常处理器中定义的逻辑,返回相应的错误信息和 HTTP 状态码。
总结
通过自定义全局异常处理器,你可以灵活地控制 Webman 应用中的错误返回,能够根据不同的异常类型返回不同的错误信息,并记录相应的日志。
星河避难所
在本文中,我们探讨了如何在 PHP 的 Webman 框架中通过继承 ExceptionHandlerInterface 自定义错误处理类。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自星河避难所