mirror of
https://github.com/flarum/core.git
synced 2025-07-26 03:01:22 +02:00
Move remaining extension handling to middleware
This commit is contained in:
@@ -11,8 +11,6 @@
|
|||||||
namespace Flarum\Api\Actions;
|
namespace Flarum\Api\Actions;
|
||||||
|
|
||||||
use Flarum\Api\Request;
|
use Flarum\Api\Request;
|
||||||
use Illuminate\Contracts\Validation\ValidationException;
|
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
|
||||||
use Zend\Diactoros\Response\JsonResponse;
|
use Zend\Diactoros\Response\JsonResponse;
|
||||||
|
|
||||||
abstract class JsonApiAction implements Action
|
abstract class JsonApiAction implements Action
|
||||||
@@ -26,21 +24,7 @@ abstract class JsonApiAction implements Action
|
|||||||
*/
|
*/
|
||||||
public function handle(Request $request)
|
public function handle(Request $request)
|
||||||
{
|
{
|
||||||
// TODO: This is gross. Move this error handling code to middleware?
|
return $this->respond($request);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -11,6 +11,8 @@
|
|||||||
namespace Flarum\Api\Middleware;
|
namespace Flarum\Api\Middleware;
|
||||||
|
|
||||||
use Flarum\Core\Exceptions\JsonApiSerializable;
|
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\ResponseInterface as Response;
|
||||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||||
use Zend\Diactoros\Response\JsonResponse;
|
use Zend\Diactoros\Response\JsonResponse;
|
||||||
@@ -27,19 +29,33 @@ class JsonApiErrors implements ErrorMiddlewareInterface
|
|||||||
$status = $error->getStatusCode();
|
$status = $error->getStatusCode();
|
||||||
|
|
||||||
$errors = $error->getErrors();
|
$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 {
|
} else {
|
||||||
$status = 500;
|
$status = 500;
|
||||||
|
|
||||||
$errors = [
|
|
||||||
['title' => $error->getMessage()]
|
|
||||||
];
|
|
||||||
|
|
||||||
// If it seems to be a valid HTTP status code, we pass on the
|
// If it seems to be a valid HTTP status code, we pass on the
|
||||||
// exception's status.
|
// exception's status.
|
||||||
$errorCode = $error->getCode();
|
$errorCode = $error->getCode();
|
||||||
if (is_int($errorCode) && $errorCode >= 400 && $errorCode < 600) {
|
if (is_int($errorCode) && $errorCode >= 400 && $errorCode < 600) {
|
||||||
$status = $errorCode;
|
$status = $errorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$errors = [
|
||||||
|
['title' => $error->getMessage()]
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSON API errors must be collected in an array under the
|
// JSON API errors must be collected in an array under the
|
||||||
|
Reference in New Issue
Block a user