异常处理

1.编写的代码

首先我们在 app目录下创建一个 Exception目录,建立一个异常捕获的处理控制器SwoftExceptionHandler

用到的注解

@ExceptionHandler() class注解,声明当前类是异常处理类
@Handler() method注解,需要捕获的异常类; 例如Exception::class为php自带或者自己定义的异常处理类

  1. /**
  2. * @ExceptionHandler()
  3. * @package App\Exception
  4. */
  5. class SwoftExceptionHandler
  6. {
  7. /**
  8. * @Handler(Exception::class)
  9. *
  10. * @param Response $response
  11. * @param \Throwable $throwable
  12. *
  13. * @return Response
  14. */
  15. public function handlerException(Response $response, \Throwable $throwable)
  16. {
  17. $file = $throwable->getFile();
  18. $line = $throwable->getLine();
  19. $code = $throwable->getCode();
  20. $exception = $throwable->getMessage();
  21. $data = ['msg' => $exception, 'file' => $file, 'line' => $line, 'code' => $code];
  22. App::error(json_encode($data));
  23. return $response->json($data);
  24. }
  25. }

2.配置能被swoft扫描到

config/properties/app.php中 的beanScan中增加App\Exception, 配置如下

  1. return [
  2. 'version' => '1.0',
  3. 'autoInitBean' => true,
  4. 'bootScan' => [
  5. 'App\Commands',
  6. ],
  7. 'beanScan' => [
  8. 'App\Controllers',
  9. 'App\Models',
  10. 'App\Middlewares',
  11. 'App\Exception',
  12. ],
  13. 'env' => 'Base',
  14. 'db' => require __DIR__ . DS . 'db.php',
  15. 'cache' => require __DIR__ . DS . 'cache.php',
  16. ];

修改完成后,重新启动swoft即可。