• 异常处理
    • 定义异常类
    • 定义异常处理类
    • 注解
      • ExceptionHandler

    异常处理

    通常我们把异常类放置 app/Exception ,异常类处理器放置 app/Exception/Handler 异常分为两部分。自定义的 Exception 异常类,异常处理类 ExceptionHandler

    定义异常类

    在不同应用场景下,定义不同的异常类,如需要一个控制器抛异常的类

    app/Exception/ControllerException.php

    1. namespace App\Exception;
    2. class ApiException extends \Exception
    3. {
    4. }

    定义异常处理类

    1. namespace App\Exception\Handler;
    2. use App\Exception\ApiException;
    3. use Swoft\Error\Annotation\Mapping\ExceptionHandler;
    4. use Swoft\Http\Message\Response;
    5. use Swoft\Http\Server\Exception\Handler\AbstractHttpErrorHandler;
    6. /**
    7. * @ExceptionHandler(ApiException::class)
    8. */
    9. class ApiExceptionHandler extends AbstractHttpErrorHandler
    10. {
    11. /**
    12. * @param \Throwable $e
    13. * @param Response $response
    14. * @return Response
    15. * @throws \ReflectionException
    16. * @throws \Swoft\Bean\Exception\ContainerException
    17. */
    18. public function handle(\Throwable $e, Response $response): Response
    19. {
    20. $data = ['code'=>-1,'msg'=>$e->getMessage()];
    21. return $response->withData($data);
    22. }
    23. }

    注解

    ExceptionHandler

    异常处理程序,指定这个处理器要处理当异常,当程序抛出 ExceptionHandler 注解里有的异常将会自动执行 handle 方法

    • 指定异常:参数可以是字符串也可以是数组

    处理一个异常

    1. @ExceptionHandler(ApiException::class)

    处理多个异常

    1. @ExceptionHandler({ApiException::class,ServiceException::class})