LaravelのDingo apiはどのようにCustom ExceptionHandler


背景
  • 最近Dingo api処理インタフェースを使用した場合、laravel自体のappExceptionsHandlerで異常をキャプチャできないことが判明した.
  • 後で調べたところ、Dingo apiがapiリクエストの異常処理を引き継いでいた.エラーをカスタマイズできずに戻ってくるので、頭が痛いです.
  • 最後にdingoのissuesで対処法を見つけた.

  • 方法
  • カスタム例外処理を作成
         Dingo\Api\Exception\Handler,  handle  
      app/Exceptions/ApiHandler.php
    
    
    json(['message' => 'Unauthorized', 'status_code' => 401], 401);
            }
            return parent::handle($exception);
        }
    }
  • サービス容器を1つ作成
     app/Providers/DingoServiceProvider.php
    
    app->singleton('api.exception', function ($app) {
                return new ExceptionHandler($app['Illuminate\Contracts\Debug\ExceptionHandler'], $this->config('errorFormat'), $this->config('debug'));
            });
        }
    }
    
  • config/appにサービス容器を追加する.php中
    ...
    'providers' => [
    ...
        App\Providers\DingoServiceProvider::class,
    ...
    ];
  • 締めくくり
  • issuesリンク参照:https://github.com/dingo/api/...@shanginnが提供するメソッドには、インタフェース戻り500が存在し、データ戻りはありません.