我是靠谱客的博主 醉熏绿茶,最近开发中收集的这篇文章主要介绍 laravel中Dingo api如何Custom ExceptionHandler,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景

  • 在近期使用Dingo api处理接口时,发现laravel本身appExceptionsHandler中无法捕获异常。
  • 后来查阅资料发现,Dingo api接管了api请求的异常处理。导致无法自定义错误返回,很是头疼。
  • 最后在dingo的issues找到了处理方法。

方法

  • 创建一个自定义异常处理

      继承自DingoApiExceptionHandler,重写handle方法
      app/Exceptions/ApiHandler.php
    
    
    <?php
    
    namespace AppExceptions;
    
    use Exception;
    use DingoApiExceptionHandler as DingoHandler;
    
    class ApiHandler extends DingoHandler
    {
        public function handle(Exception $exception)
        {
            if ($exception instanceof IlluminateAuthAuthenticationException) {
                return response()->json(['message' => 'Unauthorized', 'status_code' => 401], 401);
            }
            return parent::handle($exception);
        }
    }
  • 创建一个服务容器

     app/Providers/DingoServiceProvider.php
    
    <?php
    
    namespace AppProviders;
    
    use DingoApiProviderDingoServiceProvider as DingoServiceProviders;
    use AppExceptionsApiHandler as ExceptionHandler;
    
    class DingoServiceProvider extends DingoServiceProviders
    {
    
        protected function registerExceptionHandler()
        {
            $this->app->singleton('api.exception', function ($app) {
                return new ExceptionHandler($app['IlluminateContractsDebugExceptionHandler'], $this->config('errorFormat'), $this->config('debug'));
            });
        }
    }
    
  • 将服务容器添加到config/app.php中

    ...
    'providers' => [
    ...
        AppProvidersDingoServiceProvider::class,
    ...
    ];

结语

  • 参考issues链接:https://github.com/dingo/api/...
    @shanginn 提供的方法会存在接口返回500,且没有任何数据返回。

最后

以上就是醉熏绿茶为你收集整理的 laravel中Dingo api如何Custom ExceptionHandler的全部内容,希望文章能够帮你解决 laravel中Dingo api如何Custom ExceptionHandler所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部