<?php namespace App\Exceptions; use Guanguans\Notify\Factory; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Support\Arr; use Illuminate\Validation\ValidationException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class Handler extends ExceptionHandler { /** * A list of exception types with their corresponding custom log levels. * * @var array<class-string<\Throwable>, \Psr\Log\LogLevel::*> */ protected $levels = [ ]; /** * A list of the exception types that are not reported. * * @var array<int, class-string<\Throwable>> */ protected $dontReport = [ ]; /** * A list of the inputs that are never flashed to the session on validation exceptions. * * @var array<int, string> */ protected $dontFlash = [ 'current_password', 'password', 'password_confirmation', ]; /** * Register the exception handling callbacks for the application. * * @return void */ public function register() { $this->reportable(function (ClientException $e) { logger()->warning($e->getMessage(), array_merge(request()->all(), request()->headers->all())); return false; }); $this->reportable(function (\Throwable $e) { if (!\App::isLocal()) { Factory::weWork() ->setToken('c7264726-9a21-4e5c-b0e8-9020a9b4ca62') ->setMessage((new \Guanguans\Notify\Messages\WeWork\TextMessage([ 'content' => $e->getMessage() . "\n" . $e->getTraceAsString(), ])))->send(); } return false; }); $this->renderable(function (ClientException $e) { return response()->json([ 'code' => 400, "error" => $e->getMessage(), ], 200); }); $this->renderable(function (ValidationException $e) { $msg = Arr::first($e->errors()); return response()->json([ "error" => $msg[0], "code" => 400, ]); }); $this->renderable(function (NotFoundHttpException $e) { return response()->json([ "error" => "数据不存在", "code" => 400, ]); }); } }