From 37cdc253387212c70bf981018a34b22bc478df39 Mon Sep 17 00:00:00 2001 From: Franz Liedke Date: Wed, 9 Sep 2015 08:56:11 +0200 Subject: [PATCH] Move remaining extension handling to middleware --- .../core/src/Api/Actions/JsonApiAction.php | 18 +------------- .../core/src/Api/Middleware/JsonApiErrors.php | 24 +++++++++++++++---- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/framework/core/src/Api/Actions/JsonApiAction.php b/framework/core/src/Api/Actions/JsonApiAction.php index 932d96174..9cbe99dd0 100644 --- a/framework/core/src/Api/Actions/JsonApiAction.php +++ b/framework/core/src/Api/Actions/JsonApiAction.php @@ -11,8 +11,6 @@ namespace Flarum\Api\Actions; use Flarum\Api\Request; -use Illuminate\Contracts\Validation\ValidationException; -use Illuminate\Database\Eloquent\ModelNotFoundException; use Zend\Diactoros\Response\JsonResponse; abstract class JsonApiAction implements Action @@ -26,21 +24,7 @@ abstract class JsonApiAction implements Action */ public function handle(Request $request) { - // TODO: This is gross. Move this error handling code to middleware? - try { - return $this->respond($request); - } catch (ValidationException $e) { - $errors = []; - foreach ($e->errors()->toArray() as $field => $messages) { - $errors[] = [ - 'detail' => implode("\n", $messages), - 'path' => $field - ]; - } - return new JsonResponse(['errors' => $errors], 422); - } catch (ModelNotFoundException $e) { - return new JsonResponse(null, 404); - } + return $this->respond($request); } /** diff --git a/framework/core/src/Api/Middleware/JsonApiErrors.php b/framework/core/src/Api/Middleware/JsonApiErrors.php index 8293d4767..73adbf7dd 100644 --- a/framework/core/src/Api/Middleware/JsonApiErrors.php +++ b/framework/core/src/Api/Middleware/JsonApiErrors.php @@ -11,6 +11,8 @@ namespace Flarum\Api\Middleware; use Flarum\Core\Exceptions\JsonApiSerializable; +use Illuminate\Contracts\Validation\ValidationException; +use Illuminate\Database\Eloquent\ModelNotFoundException; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Zend\Diactoros\Response\JsonResponse; @@ -27,19 +29,33 @@ class JsonApiErrors implements ErrorMiddlewareInterface $status = $error->getStatusCode(); $errors = $error->getErrors(); + } else if ($error instanceof ValidationException) { + $status = 422; + + $errors = $error->errors()->toArray(); + $errors = array_map(function ($field, $messages) { + return [ + 'detail' => implode("\n", $messages), + 'path' => $field, + ]; + }, array_keys($errors), $errors); + } else if ($error instanceof ModelNotFoundException) { + $status = 404; + + $errors = []; } else { $status = 500; - $errors = [ - ['title' => $error->getMessage()] - ]; - // If it seems to be a valid HTTP status code, we pass on the // exception's status. $errorCode = $error->getCode(); if (is_int($errorCode) && $errorCode >= 400 && $errorCode < 600) { $status = $errorCode; } + + $errors = [ + ['title' => $error->getMessage()] + ]; } // JSON API errors must be collected in an array under the