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); }
/** * {@inheritdoc} */ protected function getDefaultAttributes($forum) { $attributes = ['title' => Core::config('forum_title'), 'baseUrl' => Core::url(), 'basePath' => parse_url(Core::url(), PHP_URL_PATH) ?: '', 'debug' => Core::inDebugMode(), 'apiUrl' => Core::url('api'), 'welcomeTitle' => Core::config('welcome_title'), 'welcomeMessage' => Core::config('welcome_message'), 'themePrimaryColor' => Core::config('theme_primary_color'), 'canView' => $forum->can($this->actor, 'view'), 'canStartDiscussion' => $forum->can($this->actor, 'startDiscussion'), 'allowSignUp' => (bool) Core::config('allow_sign_up'), 'defaultRoute' => Core::config('default_route')]; if ($this->actor->isAdmin()) { $attributes['adminUrl'] = Core::url('admin'); $attributes['version'] = Application::VERSION; } return $attributes; }
use Flarum\Forum\Middleware\HandleErrors; use Franzl\Middleware\Whoops\Middleware as WhoopsMiddleware; use Zend\Diactoros\Server; use Zend\Stratigility\MiddlewarePipe; $app = (require __DIR__ . '/flarum/bootstrap.php'); // If Flarum's configuration exists, then we can assume that installation has // been completed. We will set up a middleware pipe to route the request through // to one of the main forum actions. if (Core::isInstalled()) { $app->register('Flarum\\Forum\\ForumServiceProvider'); $flarum = new MiddlewarePipe(); $flarum->pipe($app->make('Flarum\\Forum\\Middleware\\LoginWithCookie')); $flarum->pipe($app->make('Flarum\\Api\\Middleware\\ReadJsonParameters')); $basePath = parse_url(Core::url(), PHP_URL_PATH); $router = $app->make('Flarum\\Http\\RouterMiddleware', ['routes' => $app->make('flarum.forum.routes')]); $flarum->pipe($basePath, $router); if (Core::inDebugMode()) { $flarum->pipe(new WhoopsMiddleware()); } else { $flarum->pipe(new HandleErrors(base_path('error'))); } } else { $app->register('Flarum\\Install\\InstallServiceProvider'); $flarum = new MiddlewarePipe(); $basePath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $router = $app->make('Flarum\\Http\\RouterMiddleware', ['routes' => $app->make('flarum.install.routes')]); $flarum->pipe($basePath, $router); $flarum->pipe(new WhoopsMiddleware()); } $server = Server::createServer($flarum, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES); $server->listen();