site = $site; } public function listen() { $runner = new RequestHandlerRunner( $this->safelyBootAndGetHandler(), new SapiEmitter, [ServerRequestFactory::class, 'fromGlobals'], function (Throwable $e) { $generator = new ErrorResponseGenerator; return $generator($e, new ServerRequest, new Response); } ); $runner->run(); } /** * Try to boot Flarum, and retrieve the app's HTTP request handler. * * We catch all exceptions happening during this process and format them to * prevent exposure of sensitive information. * * @return \Psr\Http\Server\RequestHandlerInterface */ private function safelyBootAndGetHandler() { try { return $this->site->bootApp()->getRequestHandler(); } catch (Throwable $e) { exit($this->formatBootException($e)); } } /** * Display the most relevant information about an early exception. */ private function formatBootException(Throwable $error): string { $message = $error->getMessage(); $file = $error->getFile(); $line = $error->getLine(); $type = get_class($error); return << $message
thrown in $file on line $line
$error
ERROR; } }