mirror of
https://github.com/flarum/core.git
synced 2025-10-12 07:24:27 +02:00
Use exception handlers instead of JsonApiSerializableInterface
This commit is contained in:
@@ -10,32 +10,24 @@
|
||||
|
||||
namespace Flarum\Api\Middleware;
|
||||
|
||||
use Flarum\Api\JsonApiResponse;
|
||||
use Flarum\Foundation\Application;
|
||||
use Illuminate\Contracts\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use Flarum\Api\ErrorHandler;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Tobscure\JsonApi\Document;
|
||||
use Tobscure\JsonApi\Exception\JsonApiSerializableInterface;
|
||||
use Zend\Diactoros\Response\JsonResponse;
|
||||
use Zend\Stratigility\ErrorMiddlewareInterface;
|
||||
use Flarum\Core;
|
||||
use Exception;
|
||||
|
||||
class HandleErrors implements ErrorMiddlewareInterface
|
||||
{
|
||||
/**
|
||||
* @var Application
|
||||
* @var ErrorHandler
|
||||
*/
|
||||
private $app;
|
||||
protected $errorHandler;
|
||||
|
||||
/**
|
||||
* @param Application $app
|
||||
* @param ErrorHandler $errorHandler
|
||||
*/
|
||||
public function __construct(Application $app)
|
||||
public function __construct(ErrorHandler $errorHandler)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->errorHandler = $errorHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -43,47 +35,6 @@ class HandleErrors implements ErrorMiddlewareInterface
|
||||
*/
|
||||
public function __invoke($e, Request $request, Response $response, callable $out = null)
|
||||
{
|
||||
return $this->handle($e);
|
||||
}
|
||||
|
||||
public function handle(Exception $e)
|
||||
{
|
||||
if ($e instanceof JsonApiSerializableInterface) {
|
||||
$status = $e->getStatusCode();
|
||||
|
||||
$errors = $e->getErrors();
|
||||
} elseif ($e instanceof ValidationException) {
|
||||
$status = 422;
|
||||
|
||||
$errors = $e->errors()->toArray();
|
||||
$errors = array_map(function ($field, $messages) {
|
||||
return [
|
||||
'detail' => implode("\n", $messages),
|
||||
'source' => ['pointer' => '/data/attributes/' . $field],
|
||||
];
|
||||
}, array_keys($errors), $errors);
|
||||
} elseif ($e instanceof ModelNotFoundException) {
|
||||
$status = 404;
|
||||
|
||||
$errors = [];
|
||||
} else {
|
||||
$status = 500;
|
||||
|
||||
$error = [
|
||||
'code' => $status,
|
||||
'title' => 'Internal Server Error'
|
||||
];
|
||||
|
||||
if ($this->app->inDebugMode()) {
|
||||
$error['detail'] = (string) $e;
|
||||
}
|
||||
|
||||
$errors = [$error];
|
||||
}
|
||||
|
||||
$document = new Document;
|
||||
$document->setErrors($errors);
|
||||
|
||||
return new JsonApiResponse($document, $status);
|
||||
return $this->errorHandler->handle($e);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user