www.gusucode.com > Flarum开源的PHP国外手机版论坛 0.1 Beta2 源码程序 > Flarum_v0.1.beta2/flarum/vendor/flarum/core/src/Api/Middleware/JsonApiErrors.php
<?php /* * This file is part of Flarum. * * (c) Toby Zerner <toby.zerner@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ 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; use Zend\Stratigility\ErrorMiddlewareInterface; use Flarum\Core; use Exception; class JsonApiErrors implements ErrorMiddlewareInterface { /** * {@inheritdoc} */ public function __invoke($e, Request $request, Response $response, callable $out = null) { return $this->handle($e); } public function handle(Exception $e) { if ($e instanceof JsonApiSerializable) { $status = $e->getStatusCode(); $errors = $e->getErrors(); } else if ($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); } else if ($e instanceof ModelNotFoundException) { $status = 404; $errors = []; } else { $status = 500; $error = [ 'code' => $status, 'title' => 'Internal Server Error' ]; if (Core::inDebugMode()) { $error['detail'] = (string) $e; } $errors = [$error]; } // JSON API errors must be collected in an array under the // "errors" key in the top level of the document $data = [ 'errors' => $errors, ]; return new JsonResponse($data, $status); } }