diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index dcb27e0..c6fd3a8 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -4,7 +4,10 @@ namespace App\Exceptions; use Exception; use Illuminate\Auth\AuthenticationException; +use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Http\JsonResponse; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class Handler extends ExceptionHandler { @@ -68,4 +71,28 @@ class Handler extends ExceptionHandler return redirect()->guest(route('login')); } + + protected function prepareException(Exception $e) + { + if (!config('app.debug') && $e instanceof ModelNotFoundException) { + return new NotFoundHttpException('Resource not found.', $e); + } + + return parent::prepareException($e); + } + + protected function prepareJsonResponse($request, Exception $e) + { + $status = $this->isHttpException($e) ? $e->getStatusCode() : 500; + + return new JsonResponse( + [ + 'status' => $status, + 'error' => $this->convertExceptionToArray($e), + ], + $status, + $this->isHttpException($e) ? $e->getHeaders() : [], + JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES + ); + } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 1804b56..927364c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -40,6 +40,7 @@ class Kernel extends HttpKernel 'api' => [ 'throttle:60,1', + \App\Http\Middleware\EnforceJson::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], diff --git a/app/Http/Middleware/EnforceJson.php b/app/Http/Middleware/EnforceJson.php new file mode 100644 index 0000000..c139bae --- /dev/null +++ b/app/Http/Middleware/EnforceJson.php @@ -0,0 +1,25 @@ +headers->set('Accept', 'application/json'); + + return $next($request); + } +}