diff --git a/framework/core/src/Foundation/ErrorHandling/HandledError.php b/framework/core/src/Foundation/ErrorHandling/HandledError.php index 5e149fca3..97882993d 100644 --- a/framework/core/src/Foundation/ErrorHandling/HandledError.php +++ b/framework/core/src/Foundation/ErrorHandling/HandledError.php @@ -71,4 +71,9 @@ class HandledError { return $this->details; } + + public function hasDetails(): bool + { + return ! empty($this->details); + } } diff --git a/framework/core/src/Foundation/ErrorHandling/JsonApiFormatter.php b/framework/core/src/Foundation/ErrorHandling/JsonApiFormatter.php index 863c9cbe9..f67d067f5 100644 --- a/framework/core/src/Foundation/ErrorHandling/JsonApiFormatter.php +++ b/framework/core/src/Foundation/ErrorHandling/JsonApiFormatter.php @@ -27,23 +27,37 @@ class JsonApiFormatter implements HttpFormatter { $document = new Document; - $data = [ - 'status' => (string) $error->getStatusCode(), - 'code' => $error->getType(), - ]; - $details = $error->getDetails(); - - if (empty($details)) { - $document->setErrors([$data]); + if ($error->hasDetails()) { + $document->setErrors($this->withDetails($error)); } else { - $document->setErrors(array_map( - function ($row) use ($data) { - return array_merge($data, $row); - }, - $details - )); + $document->setErrors($this->simple($error)); } return new JsonApiResponse($document, $error->getStatusCode()); } + + private function simple(HandledError $error): array + { + return [ + [ + 'status' => (string) $error->getStatusCode(), + 'code' => $error->getType(), + ] + ]; + } + + private function withDetails(HandledError $error): array + { + $data = [ + 'status' => (string) $error->getStatusCode(), + 'code' => $error->getType(), + ]; + + return array_map( + function ($row) use ($data) { + return array_merge($data, $row); + }, + $error->getDetails() + ); + } }